{"openapi":"3.1.0","info":{"title":"Vocla Backend API","version":"1.0.0","description":"Arabic-first voice generation API. Audio is AI-generated. Default providers in local development are deterministic mocks."},"servers":[{"url":"http://localhost:4000"},{"url":"https://api.vocla.localhost"}],"components":{"securitySchemes":{"session":{"type":"apiKey","in":"cookie","name":"vocla_session"},"apiKey":{"type":"http","scheme":"bearer"}}},"paths":{"/v1/storage/{token}":{"get":{"operationId":"storageRead","tags":["Storage"],"summary":"Read signed filesystem media (GET/HEAD and byte ranges); filesystem provider only","description":"Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"token","in":"path","required":true,"schema":{"type":"string"}},{"name":"expires","in":"query","required":true,"schema":{"type":"string","pattern":"^\\d+$"}},{"name":"signature","in":"query","required":true,"schema":{"type":"string","pattern":"^[a-f0-9]{64}$"}}],"security":[],"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/octet-stream":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"string"},"example":"example"}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/storage/{token}","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/storage/{token}","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/storage/{token}","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/storage/{token}","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/storage/{token}","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/storage/{token}","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/storage/{token}","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/storage/{token}","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/storage/{token}","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/storage/{token}","traceId":"request-id"}}}}}},"put":{"operationId":"storageWrite","tags":["Storage"],"summary":"Upload bytes to a signed filesystem URL and retain the ETag; filesystem provider only","description":"Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"token","in":"path","required":true,"schema":{"type":"string"}},{"name":"expires","in":"query","required":true,"schema":{"type":"string","pattern":"^\\d+$"}},{"name":"signature","in":"query","required":true,"schema":{"type":"string","pattern":"^[a-f0-9]{64}$"}}],"security":[],"requestBody":{"required":true,"content":{"application/octet-stream":{"schema":{"type":"string","format":"binary"}}}},"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"null"},"example":null}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/storage/{token}","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/storage/{token}","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/storage/{token}","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/storage/{token}","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/storage/{token}","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/storage/{token}","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/storage/{token}","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/storage/{token}","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/storage/{token}","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/storage/{token}","traceId":"request-id"}}}}}}},"/v1/auth/sign-up":{"post":{"operationId":"signUp","tags":["Login"],"summary":"sign Up","description":"Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false}],"security":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/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,}$"},"password":{"type":"string","minLength":10,"maxLength":128},"keepMeLoggedIn":{"default":false,"type":"boolean"},"totp":{"type":"string"},"name":{"type":"string","minLength":1,"maxLength":100},"locale":{"default":"ar","type":"string","enum":["ar","en","fr","fa","zh"]},"referralCode":{"type":"string"},"turnstileToken":{"type":"string"},"timeZone":{"description":"Browser IANA time zone (e.g. Asia/Riyadh): a last-resort hint for the user country when neither Cloudflare nor the IP lookup knows it; not stored","type":"string","maxLength":64}},"required":["email","password","name"]},"example":{"email":"new@vocla.ai","password":"Example12345!","name":"Noura","locale":"ar"}}}},"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","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)$"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"},"data":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}},"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,}$"},"name":{"type":"string"},"username":{"type":["string","null"]},"locale":{"type":"string"},"role":{"type":"string"},"verified":{"type":"boolean"},"totpEnabled":{"type":"boolean"},"workspaceId":{"anyOf":[{"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)$"},{"type":"null"}]},"avatarUrl":{"type":["string","null"]},"onboardingCompletedAt":{"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"}]},"hasPassword":{"description":"Whether the account has a password; Google / Apple-only accounts confirm sensitive actions (deleting the account) by typing their email instead","type":"boolean"},"country":{"description":"Effective country (billing, else latest detection, else sign-up, else this request): decides which country-restricted languages (Persian, Chinese) the app offers","type":["string","null"]},"user":{"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)$"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"},"data":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}},"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,}$"},"name":{"type":"string"},"username":{"type":["string","null"]},"locale":{"type":"string"},"role":{"type":"string"},"verified":{"type":"boolean"},"totpEnabled":{"type":"boolean"},"workspaceId":{"anyOf":[{"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)$"},{"type":"null"}]},"avatarUrl":{"type":["string","null"]},"onboardingCompletedAt":{"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"}]},"hasPassword":{"description":"Whether the account has a password; Google / Apple-only accounts confirm sensitive actions (deleting the account) by typing their email instead","type":"boolean"},"country":{"description":"Effective country (billing, else latest detection, else sign-up, else this request): decides which country-restricted languages (Persian, Chinese) the app offers","type":["string","null"]}},"required":["id","createdAt","updatedAt","email","name","username","locale","role","verified","totpEnabled","onboardingCompletedAt"],"additionalProperties":{}},"csrfToken":{"type":"string"},"sessionId":{"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)$"}},"required":["id","createdAt","updatedAt","email","name","username","locale","role","verified","totpEnabled","onboardingCompletedAt"],"additionalProperties":{}},"example":{"id":"01990000-0000-7000-8000-000000000001","createdAt":"2026-09-19T12:00:00.000Z","updatedAt":"2026-09-19T12:00:00.000Z","data":{},"email":"demo@vocla.ai","name":"Noura","username":"fred_will","locale":"ar-SA","role":"example","verified":true,"totpEnabled":true,"workspaceId":"01990000-0000-7000-8000-000000000001","avatarUrl":"http://localhost:4000/example","onboardingCompletedAt":"2026-09-19T12:00:00.000Z","hasPassword":true,"country":"example","user":{"id":"01990000-0000-7000-8000-000000000001","createdAt":"2026-09-19T12:00:00.000Z","updatedAt":"2026-09-19T12:00:00.000Z","data":{},"email":"demo@vocla.ai","name":"Noura","username":"fred_will","locale":"ar-SA","role":"example","verified":true,"totpEnabled":true,"workspaceId":"01990000-0000-7000-8000-000000000001","avatarUrl":"http://localhost:4000/example","onboardingCompletedAt":"2026-09-19T12:00:00.000Z","hasPassword":true,"country":"example"},"csrfToken":"example","sessionId":"01990000-0000-7000-8000-000000000001"}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/auth/sign-up","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/auth/sign-up","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/auth/sign-up","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/auth/sign-up","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/auth/sign-up","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/auth/sign-up","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/auth/sign-up","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/auth/sign-up","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/auth/sign-up","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/auth/sign-up","traceId":"request-id"}}}}}}},"/v1/auth/sign-in":{"post":{"operationId":"signIn","tags":["Login"],"summary":"sign In","description":"Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false}],"security":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/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,}$"},"password":{"type":"string","maxLength":1024},"keepMeLoggedIn":{"default":false,"type":"boolean"},"totp":{"type":"string"}},"required":["email","password"]},"example":{"email":"demo@vocla.ai","password":"Demo12345!"}}}},"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","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)$"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"},"data":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}},"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,}$"},"name":{"type":"string"},"username":{"type":["string","null"]},"locale":{"type":"string"},"role":{"type":"string"},"verified":{"type":"boolean"},"totpEnabled":{"type":"boolean"},"workspaceId":{"anyOf":[{"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)$"},{"type":"null"}]},"avatarUrl":{"type":["string","null"]},"onboardingCompletedAt":{"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"}]},"hasPassword":{"description":"Whether the account has a password; Google / Apple-only accounts confirm sensitive actions (deleting the account) by typing their email instead","type":"boolean"},"country":{"description":"Effective country (billing, else latest detection, else sign-up, else this request): decides which country-restricted languages (Persian, Chinese) the app offers","type":["string","null"]},"user":{"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)$"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"},"data":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}},"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,}$"},"name":{"type":"string"},"username":{"type":["string","null"]},"locale":{"type":"string"},"role":{"type":"string"},"verified":{"type":"boolean"},"totpEnabled":{"type":"boolean"},"workspaceId":{"anyOf":[{"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)$"},{"type":"null"}]},"avatarUrl":{"type":["string","null"]},"onboardingCompletedAt":{"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"}]},"hasPassword":{"description":"Whether the account has a password; Google / Apple-only accounts confirm sensitive actions (deleting the account) by typing their email instead","type":"boolean"},"country":{"description":"Effective country (billing, else latest detection, else sign-up, else this request): decides which country-restricted languages (Persian, Chinese) the app offers","type":["string","null"]}},"required":["id","createdAt","updatedAt","email","name","username","locale","role","verified","totpEnabled","onboardingCompletedAt"],"additionalProperties":{}},"csrfToken":{"type":"string"},"sessionId":{"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)$"}},"required":["id","createdAt","updatedAt","email","name","username","locale","role","verified","totpEnabled","onboardingCompletedAt"],"additionalProperties":{}},"example":{"id":"01990000-0000-7000-8000-000000000001","createdAt":"2026-09-19T12:00:00.000Z","updatedAt":"2026-09-19T12:00:00.000Z","data":{},"email":"demo@vocla.ai","name":"Noura","username":"fred_will","locale":"ar-SA","role":"example","verified":true,"totpEnabled":true,"workspaceId":"01990000-0000-7000-8000-000000000001","avatarUrl":"http://localhost:4000/example","onboardingCompletedAt":"2026-09-19T12:00:00.000Z","hasPassword":true,"country":"example","user":{"id":"01990000-0000-7000-8000-000000000001","createdAt":"2026-09-19T12:00:00.000Z","updatedAt":"2026-09-19T12:00:00.000Z","data":{},"email":"demo@vocla.ai","name":"Noura","username":"fred_will","locale":"ar-SA","role":"example","verified":true,"totpEnabled":true,"workspaceId":"01990000-0000-7000-8000-000000000001","avatarUrl":"http://localhost:4000/example","onboardingCompletedAt":"2026-09-19T12:00:00.000Z","hasPassword":true,"country":"example"},"csrfToken":"example","sessionId":"01990000-0000-7000-8000-000000000001"}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/auth/sign-in","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/auth/sign-in","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/auth/sign-in","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/auth/sign-in","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/auth/sign-in","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/auth/sign-in","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/auth/sign-in","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/auth/sign-in","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/auth/sign-in","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/auth/sign-in","traceId":"request-id"}}}}}}},"/v1/auth/sign-out":{"post":{"operationId":"signOut","tags":["Login"],"summary":"sign Out","description":"Acts on the signed-in user (no workspace role). Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"X-CSRF-Token","in":"header","required":false,"description":"Required for cookie-authenticated mutations; returned by sign-in/sign-up.","schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"ok":{"type":"boolean"}},"required":["ok"]},"example":{"ok":true}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/auth/sign-out","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/auth/sign-out","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/auth/sign-out","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/auth/sign-out","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/auth/sign-out","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/auth/sign-out","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/auth/sign-out","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/auth/sign-out","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/auth/sign-out","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/auth/sign-out","traceId":"request-id"}}}}}}},"/v1/auth/session":{"get":{"operationId":"getSession","tags":["Login"],"summary":"get Session","description":"Acts on the signed-in user (no workspace role). Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"timeZone","in":"query","required":false,"schema":{"description":"Browser IANA time zone (e.g. Asia/Riyadh): a last-resort hint for the user country when neither Cloudflare nor the IP lookup knows it; not stored","type":"string","maxLength":64}}],"security":[{"session":[]},{"apiKey":[]}],"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","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)$"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"},"data":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}},"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,}$"},"name":{"type":"string"},"username":{"type":["string","null"]},"locale":{"type":"string"},"role":{"type":"string"},"verified":{"type":"boolean"},"totpEnabled":{"type":"boolean"},"workspaceId":{"anyOf":[{"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)$"},{"type":"null"}]},"avatarUrl":{"type":["string","null"]},"onboardingCompletedAt":{"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"}]},"hasPassword":{"description":"Whether the account has a password; Google / Apple-only accounts confirm sensitive actions (deleting the account) by typing their email instead","type":"boolean"},"country":{"description":"Effective country (billing, else latest detection, else sign-up, else this request): decides which country-restricted languages (Persian, Chinese) the app offers","type":["string","null"]},"user":{"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)$"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"},"data":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}},"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,}$"},"name":{"type":"string"},"username":{"type":["string","null"]},"locale":{"type":"string"},"role":{"type":"string"},"verified":{"type":"boolean"},"totpEnabled":{"type":"boolean"},"workspaceId":{"anyOf":[{"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)$"},{"type":"null"}]},"avatarUrl":{"type":["string","null"]},"onboardingCompletedAt":{"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"}]},"hasPassword":{"description":"Whether the account has a password; Google / Apple-only accounts confirm sensitive actions (deleting the account) by typing their email instead","type":"boolean"},"country":{"description":"Effective country (billing, else latest detection, else sign-up, else this request): decides which country-restricted languages (Persian, Chinese) the app offers","type":["string","null"]}},"required":["id","createdAt","updatedAt","email","name","username","locale","role","verified","totpEnabled","onboardingCompletedAt"],"additionalProperties":{}},"csrfToken":{"type":"string"},"sessionId":{"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)$"}},"required":["id","createdAt","updatedAt","email","name","username","locale","role","verified","totpEnabled","onboardingCompletedAt"],"additionalProperties":{}},"example":{"id":"01990000-0000-7000-8000-000000000001","createdAt":"2026-09-19T12:00:00.000Z","updatedAt":"2026-09-19T12:00:00.000Z","data":{},"email":"demo@vocla.ai","name":"Noura","username":"fred_will","locale":"ar-SA","role":"example","verified":true,"totpEnabled":true,"workspaceId":"01990000-0000-7000-8000-000000000001","avatarUrl":"http://localhost:4000/example","onboardingCompletedAt":"2026-09-19T12:00:00.000Z","hasPassword":true,"country":"example","user":{"id":"01990000-0000-7000-8000-000000000001","createdAt":"2026-09-19T12:00:00.000Z","updatedAt":"2026-09-19T12:00:00.000Z","data":{},"email":"demo@vocla.ai","name":"Noura","username":"fred_will","locale":"ar-SA","role":"example","verified":true,"totpEnabled":true,"workspaceId":"01990000-0000-7000-8000-000000000001","avatarUrl":"http://localhost:4000/example","onboardingCompletedAt":"2026-09-19T12:00:00.000Z","hasPassword":true,"country":"example"},"csrfToken":"example","sessionId":"01990000-0000-7000-8000-000000000001"}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/auth/session","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/auth/session","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/auth/session","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/auth/session","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/auth/session","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/auth/session","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/auth/session","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/auth/session","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/auth/session","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/auth/session","traceId":"request-id"}}}}}}},"/v1/auth/forgot-password":{"post":{"operationId":"forgotPassword","tags":["Login"],"summary":"forgot Password","description":"Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false}],"security":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/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,}$"}},"required":["email"]},"example":{"email":"demo@vocla.ai"}}}},"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"ok":{"type":"boolean"}},"required":["ok"]},"example":{"ok":true}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/auth/forgot-password","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/auth/forgot-password","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/auth/forgot-password","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/auth/forgot-password","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/auth/forgot-password","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/auth/forgot-password","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/auth/forgot-password","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/auth/forgot-password","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/auth/forgot-password","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/auth/forgot-password","traceId":"request-id"}}}}}}},"/v1/auth/send-verification":{"post":{"operationId":"sendVerification","tags":["Login"],"summary":"send Verification","description":"Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false}],"security":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/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,}$"}},"required":["email"]},"example":{"email":"demo@vocla.ai"}}}},"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"ok":{"type":"boolean"}},"required":["ok"]},"example":{"ok":true}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/auth/send-verification","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/auth/send-verification","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/auth/send-verification","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/auth/send-verification","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/auth/send-verification","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/auth/send-verification","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/auth/send-verification","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/auth/send-verification","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/auth/send-verification","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/auth/send-verification","traceId":"request-id"}}}}}}},"/v1/auth/reset-password":{"post":{"operationId":"resetPassword","tags":["Login"],"summary":"reset Password","description":"Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false}],"security":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"token":{"type":"string","minLength":1,"maxLength":200},"password":{"type":"string","minLength":10,"maxLength":128}},"required":["token","password"]},"example":{"token":"example","password":"Example12345!"}}}},"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"ok":{"type":"boolean"}},"required":["ok"]},"example":{"ok":true}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/auth/reset-password","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/auth/reset-password","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/auth/reset-password","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/auth/reset-password","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/auth/reset-password","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/auth/reset-password","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/auth/reset-password","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/auth/reset-password","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/auth/reset-password","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/auth/reset-password","traceId":"request-id"}}}}}}},"/v1/auth/verify-email":{"post":{"operationId":"verifyEmail","tags":["Login"],"summary":"verify Email","description":"Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false}],"security":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"token":{"type":"string","minLength":1,"maxLength":200}},"required":["token"]},"example":{"token":"example"}}}},"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"ok":{"type":"boolean"}},"required":["ok"]},"example":{"ok":true}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/auth/verify-email","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/auth/verify-email","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/auth/verify-email","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/auth/verify-email","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/auth/verify-email","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/auth/verify-email","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/auth/verify-email","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/auth/verify-email","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/auth/verify-email","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/auth/verify-email","traceId":"request-id"}}}}}}},"/v1/auth/oauth/{provider}":{"get":{"operationId":"oauthStart","tags":["Login"],"summary":"oauth Start","description":"Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"provider","in":"path","required":true,"schema":{"type":"string"}},{"name":"app","in":"query","required":false,"schema":{"type":"string","enum":["web","admin"]}},{"name":"locale","in":"query","required":false,"schema":{"type":"string","enum":["ar","en","fr","fa","zh"]}},{"name":"timeZone","in":"query","required":false,"schema":{"description":"Browser IANA time zone (e.g. Asia/Riyadh): a last-resort hint for the user country when neither Cloudflare nor the IP lookup knows it; not stored","type":"string","maxLength":64}}],"security":[],"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"url":{"type":"string","format":"uri"}},"required":["url"]},"example":{"url":"http://localhost:4000/example"}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/auth/oauth/{provider}","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/auth/oauth/{provider}","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/auth/oauth/{provider}","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/auth/oauth/{provider}","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/auth/oauth/{provider}","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/auth/oauth/{provider}","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/auth/oauth/{provider}","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/auth/oauth/{provider}","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/auth/oauth/{provider}","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/auth/oauth/{provider}","traceId":"request-id"}}}}}}},"/v1/auth/oauth/{provider}/callback":{"get":{"operationId":"oauthCallback","tags":["Login"],"summary":"oauth Callback","description":"Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"provider","in":"path","required":true,"schema":{"type":"string"}},{"name":"code","in":"query","required":false,"schema":{"type":"string"}},{"name":"state","in":"query","required":false,"schema":{"type":"string"}},{"name":"error","in":"query","required":false,"schema":{"type":"string"}}],"security":[],"responses":{"302":{"description":"Redirect to the originating app and locale; successful OAuth also sets the session cookie.","headers":{"Location":{"schema":{"type":"string","format":"uri"}},"Set-Cookie":{"schema":{"type":"string"}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/auth/oauth/{provider}/callback","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/auth/oauth/{provider}/callback","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/auth/oauth/{provider}/callback","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/auth/oauth/{provider}/callback","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/auth/oauth/{provider}/callback","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/auth/oauth/{provider}/callback","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/auth/oauth/{provider}/callback","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/auth/oauth/{provider}/callback","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/auth/oauth/{provider}/callback","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/auth/oauth/{provider}/callback","traceId":"request-id"}}}}}}},"/v1/auth/two-factor/setup":{"post":{"operationId":"setupTwoFactor","tags":["Settings: Account"],"summary":"setup Two Factor","description":"Acts on the signed-in user (no workspace role). Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"X-CSRF-Token","in":"header","required":false,"description":"Required for cookie-authenticated mutations; returned by sign-in/sign-up.","schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"password":{"type":"string","minLength":1,"maxLength":128}},"required":["password"]},"example":{"password":"Example12345!"}}}},"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"secret":{"type":"string"},"uri":{"type":"string"}},"required":["secret","uri"]},"example":{"secret":"example","uri":"example"}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/auth/two-factor/setup","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/auth/two-factor/setup","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/auth/two-factor/setup","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/auth/two-factor/setup","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/auth/two-factor/setup","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/auth/two-factor/setup","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/auth/two-factor/setup","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/auth/two-factor/setup","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/auth/two-factor/setup","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/auth/two-factor/setup","traceId":"request-id"}}}}}}},"/v1/auth/two-factor/verify":{"post":{"operationId":"verifyTwoFactor","tags":["Settings: Account"],"summary":"verify Two Factor","description":"Acts on the signed-in user (no workspace role). Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"X-CSRF-Token","in":"header","required":false,"description":"Required for cookie-authenticated mutations; returned by sign-in/sign-up.","schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"code":{"type":"string","pattern":"^\\d{6}$"}},"required":["code"]},"example":{"code":"123456"}}}},"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"ok":{"type":"boolean"}},"required":["ok"]},"example":{"ok":true}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/auth/two-factor/verify","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/auth/two-factor/verify","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/auth/two-factor/verify","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/auth/two-factor/verify","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/auth/two-factor/verify","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/auth/two-factor/verify","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/auth/two-factor/verify","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/auth/two-factor/verify","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/auth/two-factor/verify","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/auth/two-factor/verify","traceId":"request-id"}}}}}}},"/v1/auth/two-factor":{"delete":{"operationId":"disableTwoFactor","tags":["Settings: Account"],"summary":"disable Two Factor","description":"Acts on the signed-in user (no workspace role). Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"X-CSRF-Token","in":"header","required":false,"description":"Required for cookie-authenticated mutations; returned by sign-in/sign-up.","schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"password":{"type":"string","minLength":1,"maxLength":128},"code":{"type":"string"}},"required":["password","code"]},"example":{"password":"Example12345!","code":"example"}}}},"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"ok":{"type":"boolean"}},"required":["ok"]},"example":{"ok":true}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/auth/two-factor","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/auth/two-factor","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/auth/two-factor","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/auth/two-factor","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/auth/two-factor","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/auth/two-factor","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/auth/two-factor","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/auth/two-factor","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/auth/two-factor","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/auth/two-factor","traceId":"request-id"}}}}}}},"/v1/auth/sessions":{"get":{"operationId":"listSessions","tags":["Settings: Account"],"summary":"list Sessions","description":"Acts on the signed-in user (no workspace role). Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"cursor","in":"query","required":false,"schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"schema":{"default":25,"type":"integer","minimum":1,"maximum":100}},{"name":"q","in":"query","required":false,"schema":{"type":"string","maxLength":200}}],"security":[{"session":[]},{"apiKey":[]}],"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"items":{"type":"array","items":{"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)$"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"},"data":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}}},"required":["id","createdAt","updatedAt"],"additionalProperties":{}}},"nextCursor":{"type":["string","null"]}},"required":["items","nextCursor"]},"example":{"items":[{"id":"01990000-0000-7000-8000-000000000001","createdAt":"2026-09-19T12:00:00.000Z","updatedAt":"2026-09-19T12:00:00.000Z","data":{}}],"nextCursor":"example"}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/auth/sessions","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/auth/sessions","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/auth/sessions","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/auth/sessions","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/auth/sessions","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/auth/sessions","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/auth/sessions","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/auth/sessions","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/auth/sessions","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/auth/sessions","traceId":"request-id"}}}}}}},"/v1/auth/sessions/{id}":{"delete":{"operationId":"revokeSession","tags":["Settings: Account"],"summary":"revoke Session","description":"Acts on the signed-in user (no workspace role). Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"X-CSRF-Token","in":"header","required":false,"description":"Required for cookie-authenticated mutations; returned by sign-in/sign-up.","schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"ok":{"type":"boolean"}},"required":["ok"]},"example":{"ok":true}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/auth/sessions/{id}","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/auth/sessions/{id}","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/auth/sessions/{id}","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/auth/sessions/{id}","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/auth/sessions/{id}","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/auth/sessions/{id}","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/auth/sessions/{id}","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/auth/sessions/{id}","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/auth/sessions/{id}","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/auth/sessions/{id}","traceId":"request-id"}}}}}}},"/v1/auth/mobile/sign-in":{"post":{"operationId":"mobileSignIn","tags":["Mobile app"],"summary":"Sign in with email and password; returns bearer tokens (401 UNAUTHENTICATED / TOTP_REQUIRED like the web sign-in)","description":"Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false}],"security":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/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,}$"},"password":{"type":"string","maxLength":1024},"keepMeLoggedIn":{"default":false,"type":"boolean"},"totp":{"type":"string"},"device":{"type":"object","properties":{"platform":{"type":"string","enum":["ios","android","web"]},"name":{"description":"Device model shown in the sessions list","type":"string","maxLength":100},"appVersion":{"type":"string","maxLength":20}},"required":["platform"]}},"required":["email","password","device"]},"example":{"email":"demo@vocla.ai","password":"Demo12345!","device":{"platform":"android"}}}}},"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"tokenType":{"type":"string","const":"Bearer"},"accessToken":{"type":"string","description":"JWT for Authorization: Bearer; expires after expiresIn seconds"},"refreshToken":{"type":"string","description":"Single-use: POST /v1/auth/mobile/refresh returns a new one. Store it in the device keychain"},"expiresIn":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"refreshExpiresAt":{"type":"string"},"session":{"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)$"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"},"data":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}}},"required":["id","createdAt","updatedAt"],"additionalProperties":{},"description":"Same payload as GET /v1/auth/session, without csrfToken"}},"required":["tokenType","accessToken","refreshToken","expiresIn","refreshExpiresAt","session"]},"example":{"tokenType":"Bearer","accessToken":"example","refreshToken":"example","expiresIn":-9007199254740991,"refreshExpiresAt":"2026-09-19T12:00:00.000Z","session":{"id":"01990000-0000-7000-8000-000000000001","createdAt":"2026-09-19T12:00:00.000Z","updatedAt":"2026-09-19T12:00:00.000Z","data":{}}}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/auth/mobile/sign-in","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/auth/mobile/sign-in","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/auth/mobile/sign-in","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/auth/mobile/sign-in","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/auth/mobile/sign-in","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/auth/mobile/sign-in","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/auth/mobile/sign-in","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/auth/mobile/sign-in","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/auth/mobile/sign-in","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/auth/mobile/sign-in","traceId":"request-id"}}}}}}},"/v1/auth/mobile/sign-up":{"post":{"operationId":"mobileSignUp","tags":["Mobile app"],"summary":"Create an account (verification email sent) and return bearer tokens","description":"Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false}],"security":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/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,}$"},"password":{"type":"string","minLength":10,"maxLength":128},"keepMeLoggedIn":{"default":false,"type":"boolean"},"totp":{"type":"string"},"name":{"type":"string","minLength":1,"maxLength":100},"locale":{"default":"ar","type":"string","enum":["ar","en","fr","fa","zh"]},"referralCode":{"type":"string"},"timeZone":{"description":"Browser IANA time zone (e.g. Asia/Riyadh): a last-resort hint for the user country when neither Cloudflare nor the IP lookup knows it; not stored","type":"string","maxLength":64},"device":{"type":"object","properties":{"platform":{"type":"string","enum":["ios","android","web"]},"name":{"description":"Device model shown in the sessions list","type":"string","maxLength":100},"appVersion":{"type":"string","maxLength":20}},"required":["platform"]}},"required":["email","password","name","device"]},"example":{"email":"new@vocla.ai","password":"Example12345!","name":"Noura","locale":"ar","device":{"platform":"ios"}}}}},"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"tokenType":{"type":"string","const":"Bearer"},"accessToken":{"type":"string","description":"JWT for Authorization: Bearer; expires after expiresIn seconds"},"refreshToken":{"type":"string","description":"Single-use: POST /v1/auth/mobile/refresh returns a new one. Store it in the device keychain"},"expiresIn":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"refreshExpiresAt":{"type":"string"},"session":{"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)$"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"},"data":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}}},"required":["id","createdAt","updatedAt"],"additionalProperties":{},"description":"Same payload as GET /v1/auth/session, without csrfToken"}},"required":["tokenType","accessToken","refreshToken","expiresIn","refreshExpiresAt","session"]},"example":{"tokenType":"Bearer","accessToken":"example","refreshToken":"example","expiresIn":-9007199254740991,"refreshExpiresAt":"2026-09-19T12:00:00.000Z","session":{"id":"01990000-0000-7000-8000-000000000001","createdAt":"2026-09-19T12:00:00.000Z","updatedAt":"2026-09-19T12:00:00.000Z","data":{}}}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/auth/mobile/sign-up","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/auth/mobile/sign-up","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/auth/mobile/sign-up","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/auth/mobile/sign-up","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/auth/mobile/sign-up","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/auth/mobile/sign-up","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/auth/mobile/sign-up","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/auth/mobile/sign-up","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/auth/mobile/sign-up","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/auth/mobile/sign-up","traceId":"request-id"}}}}}}},"/v1/auth/mobile/refresh":{"post":{"operationId":"mobileRefresh","tags":["Mobile app"],"summary":"Rotate the refresh token and get a new access token. A refresh token works once; replaying an already rotated one (after a 60-second grace for lost responses) revokes the session. 401 when expired or revoked","description":"Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false}],"security":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"refreshToken":{"type":"string","minLength":10,"maxLength":200}},"required":["refreshToken"]},"example":{"refreshToken":"examplexxx"}}}},"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"tokenType":{"type":"string","const":"Bearer"},"accessToken":{"type":"string","description":"JWT for Authorization: Bearer; expires after expiresIn seconds"},"refreshToken":{"type":"string","description":"Single-use: POST /v1/auth/mobile/refresh returns a new one. Store it in the device keychain"},"expiresIn":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"refreshExpiresAt":{"type":"string"},"session":{"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)$"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"},"data":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}}},"required":["id","createdAt","updatedAt"],"additionalProperties":{},"description":"Same payload as GET /v1/auth/session, without csrfToken"}},"required":["tokenType","accessToken","refreshToken","expiresIn","refreshExpiresAt","session"]},"example":{"tokenType":"Bearer","accessToken":"example","refreshToken":"example","expiresIn":-9007199254740991,"refreshExpiresAt":"2026-09-19T12:00:00.000Z","session":{"id":"01990000-0000-7000-8000-000000000001","createdAt":"2026-09-19T12:00:00.000Z","updatedAt":"2026-09-19T12:00:00.000Z","data":{}}}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/auth/mobile/refresh","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/auth/mobile/refresh","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/auth/mobile/refresh","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/auth/mobile/refresh","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/auth/mobile/refresh","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/auth/mobile/refresh","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/auth/mobile/refresh","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/auth/mobile/refresh","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/auth/mobile/refresh","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/auth/mobile/refresh","traceId":"request-id"}}}}}}},"/v1/auth/mobile/oauth/{provider}/start":{"get":{"operationId":"mobileOauthStart","tags":["Mobile app"],"summary":"Open in the system browser: redirects to the provider; the callback redirects to redirectUri?code=… (one-time, 2 minutes) or ?error=conflict|access_denied|error","description":"Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"provider","in":"path","required":true,"schema":{"type":"string"}},{"name":"redirectUri","in":"query","required":true,"schema":{"type":"string","minLength":8,"maxLength":500,"description":"Where the app listens: vocla://auth/callback (exp:// and http://localhost only in local development)"}},{"name":"codeChallenge","in":"query","required":true,"schema":{"type":"string","pattern":"^[A-Za-z0-9_-]{43}$","description":"PKCE S256 challenge of the verifier sent to /v1/auth/mobile/exchange"}},{"name":"locale","in":"query","required":false,"schema":{"type":"string","enum":["ar","en","fr","fa","zh"]}},{"name":"timeZone","in":"query","required":false,"schema":{"description":"Browser IANA time zone (e.g. Asia/Riyadh): a last-resort hint for the user country when neither Cloudflare nor the IP lookup knows it; not stored","type":"string","maxLength":64}}],"security":[],"responses":{"302":{"description":"Redirect to the originating app and locale; successful OAuth also sets the session cookie.","headers":{"Location":{"schema":{"type":"string","format":"uri"}},"Set-Cookie":{"schema":{"type":"string"}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/auth/mobile/oauth/{provider}/start","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/auth/mobile/oauth/{provider}/start","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/auth/mobile/oauth/{provider}/start","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/auth/mobile/oauth/{provider}/start","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/auth/mobile/oauth/{provider}/start","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/auth/mobile/oauth/{provider}/start","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/auth/mobile/oauth/{provider}/start","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/auth/mobile/oauth/{provider}/start","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/auth/mobile/oauth/{provider}/start","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/auth/mobile/oauth/{provider}/start","traceId":"request-id"}}}}}}},"/v1/auth/mobile/exchange":{"post":{"operationId":"mobileExchange","tags":["Mobile app"],"summary":"Trade the one-time OAuth code (with its PKCE verifier) for bearer tokens","description":"Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false}],"security":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"code":{"type":"string","minLength":10,"maxLength":200},"codeVerifier":{"type":"string","pattern":"^[A-Za-z0-9._~-]{43,128}$"},"device":{"type":"object","properties":{"platform":{"type":"string","enum":["ios","android","web"]},"name":{"description":"Device model shown in the sessions list","type":"string","maxLength":100},"appVersion":{"type":"string","maxLength":20}},"required":["platform"]}},"required":["code","codeVerifier","device"]},"example":{"code":"examplexxx","codeVerifier":"example","device":{"platform":"ios","name":"Noura","appVersion":"example"}}}}},"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"tokenType":{"type":"string","const":"Bearer"},"accessToken":{"type":"string","description":"JWT for Authorization: Bearer; expires after expiresIn seconds"},"refreshToken":{"type":"string","description":"Single-use: POST /v1/auth/mobile/refresh returns a new one. Store it in the device keychain"},"expiresIn":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"refreshExpiresAt":{"type":"string"},"session":{"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)$"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"},"data":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}}},"required":["id","createdAt","updatedAt"],"additionalProperties":{},"description":"Same payload as GET /v1/auth/session, without csrfToken"}},"required":["tokenType","accessToken","refreshToken","expiresIn","refreshExpiresAt","session"]},"example":{"tokenType":"Bearer","accessToken":"example","refreshToken":"example","expiresIn":-9007199254740991,"refreshExpiresAt":"2026-09-19T12:00:00.000Z","session":{"id":"01990000-0000-7000-8000-000000000001","createdAt":"2026-09-19T12:00:00.000Z","updatedAt":"2026-09-19T12:00:00.000Z","data":{}}}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/auth/mobile/exchange","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/auth/mobile/exchange","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/auth/mobile/exchange","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/auth/mobile/exchange","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/auth/mobile/exchange","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/auth/mobile/exchange","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/auth/mobile/exchange","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/auth/mobile/exchange","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/auth/mobile/exchange","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/auth/mobile/exchange","traceId":"request-id"}}}}}}},"/v1/auth/mobile/apple":{"post":{"operationId":"mobileApple","tags":["Mobile app"],"summary":"Sign in with Apple (iOS). 503 PROVIDER_UNAVAILABLE when APPLE_CLIENT_IDS is not configured; 409 CONFLICT when the email belongs to an account using another sign-in method","description":"Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false}],"security":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"identityToken":{"type":"string","minLength":20,"maxLength":10000},"nonce":{"type":"string","minLength":16,"maxLength":200,"description":"The raw nonce; the app passed sha256(nonce) (hex) to Sign in with Apple"},"name":{"description":"Apple shares the name on the first sign-in only","type":"object","properties":{"givenName":{"anyOf":[{"type":"string","maxLength":100},{"type":"null"}]},"familyName":{"anyOf":[{"type":"string","maxLength":100},{"type":"null"}]}}},"device":{"type":"object","properties":{"platform":{"type":"string","enum":["ios","android","web"]},"name":{"description":"Device model shown in the sessions list","type":"string","maxLength":100},"appVersion":{"type":"string","maxLength":20}},"required":["platform"]}},"required":["identityToken","nonce","device"]},"example":{"identityToken":"examplexxxxxxxxxxxxx","nonce":"examplexxxxxxxxx","name":{"givenName":"example","familyName":"example"},"device":{"platform":"ios","name":"Noura","appVersion":"example"}}}}},"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"tokenType":{"type":"string","const":"Bearer"},"accessToken":{"type":"string","description":"JWT for Authorization: Bearer; expires after expiresIn seconds"},"refreshToken":{"type":"string","description":"Single-use: POST /v1/auth/mobile/refresh returns a new one. Store it in the device keychain"},"expiresIn":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"refreshExpiresAt":{"type":"string"},"session":{"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)$"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"},"data":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}}},"required":["id","createdAt","updatedAt"],"additionalProperties":{},"description":"Same payload as GET /v1/auth/session, without csrfToken"}},"required":["tokenType","accessToken","refreshToken","expiresIn","refreshExpiresAt","session"]},"example":{"tokenType":"Bearer","accessToken":"example","refreshToken":"example","expiresIn":-9007199254740991,"refreshExpiresAt":"2026-09-19T12:00:00.000Z","session":{"id":"01990000-0000-7000-8000-000000000001","createdAt":"2026-09-19T12:00:00.000Z","updatedAt":"2026-09-19T12:00:00.000Z","data":{}}}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/auth/mobile/apple","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/auth/mobile/apple","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/auth/mobile/apple","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/auth/mobile/apple","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/auth/mobile/apple","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/auth/mobile/apple","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/auth/mobile/apple","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/auth/mobile/apple","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/auth/mobile/apple","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/auth/mobile/apple","traceId":"request-id"}}}}}}},"/v1/me/push-devices":{"post":{"operationId":"registerPushDevice","tags":["Mobile app"],"summary":"Register (or move to this account) the device push token for \"your generation is ready\" notifications","description":"Acts on the signed-in user (no workspace role). Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"X-CSRF-Token","in":"header","required":false,"description":"Required for cookie-authenticated mutations; returned by sign-in/sign-up.","schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"token":{"type":"string","maxLength":200,"pattern":"^Expo(nent)?PushToken\\[.+\\]$","description":"Expo push token"},"platform":{"type":"string","enum":["ios","android"]},"locale":{"type":"string","enum":["ar","en","fr","fa","zh"]},"appVersion":{"type":"string","maxLength":20}},"required":["token","platform"]},"example":{"token":"example","platform":"ios","locale":"ar","appVersion":"example"}}}},"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"ok":{"type":"boolean"}},"required":["ok"]},"example":{"ok":true}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/me/push-devices","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/me/push-devices","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/me/push-devices","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/me/push-devices","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/me/push-devices","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/me/push-devices","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/me/push-devices","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/me/push-devices","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/me/push-devices","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/me/push-devices","traceId":"request-id"}}}}}},"delete":{"operationId":"deletePushDevice","tags":["Mobile app"],"summary":"Stop push notifications to this device (only your own tokens)","description":"Acts on the signed-in user (no workspace role). Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"X-CSRF-Token","in":"header","required":false,"description":"Required for cookie-authenticated mutations; returned by sign-in/sign-up.","schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"token":{"type":"string","maxLength":200}},"required":["token"]},"example":{"token":"example"}}}},"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"ok":{"type":"boolean"}},"required":["ok"]},"example":{"ok":true}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/me/push-devices","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/me/push-devices","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/me/push-devices","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/me/push-devices","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/me/push-devices","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/me/push-devices","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/me/push-devices","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/me/push-devices","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/me/push-devices","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/me/push-devices","traceId":"request-id"}}}}}}},"/v1/me":{"get":{"operationId":"getMe","tags":["Settings: Account"],"summary":"get Me","description":"Acts on the signed-in user (no workspace role). Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false}],"security":[{"session":[]},{"apiKey":[]}],"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","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)$"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"},"data":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}},"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,}$"},"name":{"type":"string"},"username":{"type":["string","null"]},"locale":{"type":"string"},"role":{"type":"string"},"verified":{"type":"boolean"},"totpEnabled":{"type":"boolean"},"workspaceId":{"anyOf":[{"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)$"},{"type":"null"}]},"avatarUrl":{"type":["string","null"]},"onboardingCompletedAt":{"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"}]},"hasPassword":{"description":"Whether the account has a password; Google / Apple-only accounts confirm sensitive actions (deleting the account) by typing their email instead","type":"boolean"},"country":{"description":"Effective country (billing, else latest detection, else sign-up, else this request): decides which country-restricted languages (Persian, Chinese) the app offers","type":["string","null"]}},"required":["id","createdAt","updatedAt","email","name","username","locale","role","verified","totpEnabled","onboardingCompletedAt"],"additionalProperties":{}},"example":{"id":"01990000-0000-7000-8000-000000000001","createdAt":"2026-09-19T12:00:00.000Z","updatedAt":"2026-09-19T12:00:00.000Z","data":{},"email":"demo@vocla.ai","name":"Noura","username":"fred_will","locale":"ar-SA","role":"example","verified":true,"totpEnabled":true,"workspaceId":"01990000-0000-7000-8000-000000000001","avatarUrl":"http://localhost:4000/example","onboardingCompletedAt":"2026-09-19T12:00:00.000Z","hasPassword":true,"country":"example"}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/me","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/me","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/me","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/me","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/me","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/me","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/me","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/me","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/me","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/me","traceId":"request-id"}}}}}},"patch":{"operationId":"updateMe","tags":["Settings: Account"],"summary":"update Me","description":"Acts on the signed-in user (no workspace role). Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"X-CSRF-Token","in":"header","required":false,"description":"Required for cookie-authenticated mutations; returned by sign-in/sign-up.","schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":100},"username":{"type":"string","pattern":"^[a-z0-9_]{3,30}$"},"locale":{"type":"string","enum":["ar","en","fr","fa","zh"]},"region":{"type":"string","minLength":2,"maxLength":2},"theme":{"type":"string","enum":["light","dark","system"]},"phone":{"type":"string","maxLength":30}}},"example":{"name":"Noura","username":"fred_will","locale":"ar","region":"example","theme":"light","phone":"example"}}}},"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","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)$"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"},"data":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}},"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,}$"},"name":{"type":"string"},"username":{"type":["string","null"]},"locale":{"type":"string"},"role":{"type":"string"},"verified":{"type":"boolean"},"totpEnabled":{"type":"boolean"},"workspaceId":{"anyOf":[{"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)$"},{"type":"null"}]},"avatarUrl":{"type":["string","null"]},"onboardingCompletedAt":{"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"}]},"hasPassword":{"description":"Whether the account has a password; Google / Apple-only accounts confirm sensitive actions (deleting the account) by typing their email instead","type":"boolean"},"country":{"description":"Effective country (billing, else latest detection, else sign-up, else this request): decides which country-restricted languages (Persian, Chinese) the app offers","type":["string","null"]}},"required":["id","createdAt","updatedAt","email","name","username","locale","role","verified","totpEnabled","onboardingCompletedAt"],"additionalProperties":{}},"example":{"id":"01990000-0000-7000-8000-000000000001","createdAt":"2026-09-19T12:00:00.000Z","updatedAt":"2026-09-19T12:00:00.000Z","data":{},"email":"demo@vocla.ai","name":"Noura","username":"fred_will","locale":"ar-SA","role":"example","verified":true,"totpEnabled":true,"workspaceId":"01990000-0000-7000-8000-000000000001","avatarUrl":"http://localhost:4000/example","onboardingCompletedAt":"2026-09-19T12:00:00.000Z","hasPassword":true,"country":"example"}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/me","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/me","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/me","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/me","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/me","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/me","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/me","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/me","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/me","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/me","traceId":"request-id"}}}}}},"delete":{"operationId":"deleteMe","tags":["Settings: Account"],"summary":"Delete your account. Workspaces only you belong to are deleted (files erased within 30 days); teams you own pass to the next member; renewing paid subscriptions are cancelled. 401 for a wrong password; 422 confirmation when a passwordless account does not confirm its email; 409 subscription_cancel_failed when the payment provider could not cancel a subscription (nothing is deleted)","description":"Acts on the signed-in user (no workspace role). Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"X-CSRF-Token","in":"header","required":false,"description":"Required for cookie-authenticated mutations; returned by sign-in/sign-up.","schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"password":{"description":"Required when the account has a password","type":"string","minLength":1,"maxLength":128},"confirmation":{"description":"Accounts without a password (Google / Apple sign-in): the account email, typed to confirm","type":"string","maxLength":254}}},"example":{"password":"Example12345!","confirmation":"example"}}}},"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"ok":{"type":"boolean"}},"required":["ok"]},"example":{"ok":true}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/me","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/me","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/me","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/me","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/me","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/me","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/me","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/me","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/me","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/me","traceId":"request-id"}}}}}}},"/v1/me/password":{"post":{"operationId":"changePassword","tags":["Settings: Account"],"summary":"change Password","description":"Acts on the signed-in user (no workspace role). Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"X-CSRF-Token","in":"header","required":false,"description":"Required for cookie-authenticated mutations; returned by sign-in/sign-up.","schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"currentPassword":{"type":"string","maxLength":1024},"newPassword":{"type":"string","minLength":10,"maxLength":128}},"required":["currentPassword","newPassword"]},"example":{"currentPassword":"example","newPassword":"examplexxx"}}}},"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"ok":{"type":"boolean"}},"required":["ok"]},"example":{"ok":true}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/me/password","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/me/password","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/me/password","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/me/password","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/me/password","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/me/password","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/me/password","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/me/password","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/me/password","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/me/password","traceId":"request-id"}}}}}}},"/v1/me/avatar":{"post":{"operationId":"setAvatar","tags":["Settings: Account"],"summary":"set Avatar","description":"Acts on the signed-in user (no workspace role). Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"X-CSRF-Token","in":"header","required":false,"description":"Required for cookie-authenticated mutations; returned by sign-in/sign-up.","schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"uploadId":{"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)$"}},"required":["uploadId"]},"example":{"uploadId":"01990000-0000-7000-8000-000000000001"}}}},"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","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)$"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"},"data":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}},"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,}$"},"name":{"type":"string"},"username":{"type":["string","null"]},"locale":{"type":"string"},"role":{"type":"string"},"verified":{"type":"boolean"},"totpEnabled":{"type":"boolean"},"workspaceId":{"anyOf":[{"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)$"},{"type":"null"}]},"avatarUrl":{"type":["string","null"]},"onboardingCompletedAt":{"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"}]},"hasPassword":{"description":"Whether the account has a password; Google / Apple-only accounts confirm sensitive actions (deleting the account) by typing their email instead","type":"boolean"},"country":{"description":"Effective country (billing, else latest detection, else sign-up, else this request): decides which country-restricted languages (Persian, Chinese) the app offers","type":["string","null"]}},"required":["id","createdAt","updatedAt","email","name","username","locale","role","verified","totpEnabled","onboardingCompletedAt"],"additionalProperties":{}},"example":{"id":"01990000-0000-7000-8000-000000000001","createdAt":"2026-09-19T12:00:00.000Z","updatedAt":"2026-09-19T12:00:00.000Z","data":{},"email":"demo@vocla.ai","name":"Noura","username":"fred_will","locale":"ar-SA","role":"example","verified":true,"totpEnabled":true,"workspaceId":"01990000-0000-7000-8000-000000000001","avatarUrl":"http://localhost:4000/example","onboardingCompletedAt":"2026-09-19T12:00:00.000Z","hasPassword":true,"country":"example"}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/me/avatar","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/me/avatar","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/me/avatar","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/me/avatar","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/me/avatar","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/me/avatar","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/me/avatar","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/me/avatar","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/me/avatar","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/me/avatar","traceId":"request-id"}}}}}},"delete":{"operationId":"deleteAvatar","tags":["Settings: Account"],"summary":"delete Avatar","description":"Acts on the signed-in user (no workspace role). Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"X-CSRF-Token","in":"header","required":false,"description":"Required for cookie-authenticated mutations; returned by sign-in/sign-up.","schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","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)$"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"},"data":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}},"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,}$"},"name":{"type":"string"},"username":{"type":["string","null"]},"locale":{"type":"string"},"role":{"type":"string"},"verified":{"type":"boolean"},"totpEnabled":{"type":"boolean"},"workspaceId":{"anyOf":[{"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)$"},{"type":"null"}]},"avatarUrl":{"type":["string","null"]},"onboardingCompletedAt":{"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"}]},"hasPassword":{"description":"Whether the account has a password; Google / Apple-only accounts confirm sensitive actions (deleting the account) by typing their email instead","type":"boolean"},"country":{"description":"Effective country (billing, else latest detection, else sign-up, else this request): decides which country-restricted languages (Persian, Chinese) the app offers","type":["string","null"]}},"required":["id","createdAt","updatedAt","email","name","username","locale","role","verified","totpEnabled","onboardingCompletedAt"],"additionalProperties":{}},"example":{"id":"01990000-0000-7000-8000-000000000001","createdAt":"2026-09-19T12:00:00.000Z","updatedAt":"2026-09-19T12:00:00.000Z","data":{},"email":"demo@vocla.ai","name":"Noura","username":"fred_will","locale":"ar-SA","role":"example","verified":true,"totpEnabled":true,"workspaceId":"01990000-0000-7000-8000-000000000001","avatarUrl":"http://localhost:4000/example","onboardingCompletedAt":"2026-09-19T12:00:00.000Z","hasPassword":true,"country":"example"}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/me/avatar","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/me/avatar","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/me/avatar","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/me/avatar","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/me/avatar","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/me/avatar","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/me/avatar","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/me/avatar","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/me/avatar","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/me/avatar","traceId":"request-id"}}}}}}},"/v1/support":{"post":{"operationId":"submitSupport","tags":["Support"],"summary":"submit Support","description":"Acts on the signed-in user (no workspace role). Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"X-CSRF-Token","in":"header","required":false,"description":"Required for cookie-authenticated mutations; returned by sign-in/sign-up.","schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"topic":{"type":"string","enum":["question","feedback","bug","billing","other"]},"message":{"type":"string","minLength":1,"maxLength":5000},"attachmentId":{"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)$"}},"required":["topic","message"]},"example":{"topic":"question","message":"example","attachmentId":"01990000-0000-7000-8000-000000000001"}}}},"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","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)$"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"},"data":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}}},"required":["id","createdAt","updatedAt"],"additionalProperties":{}},"example":{"id":"01990000-0000-7000-8000-000000000001","createdAt":"2026-09-19T12:00:00.000Z","updatedAt":"2026-09-19T12:00:00.000Z","data":{}}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/support","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/support","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/support","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/support","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/support","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/support","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/support","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/support","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/support","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/support","traceId":"request-id"}}}}}},"get":{"operationId":"listSupport","tags":["Support"],"summary":"The signed-in customer's tickets, most recent activity first, each with status, unread flag and a preview of the last message","description":"Acts on the signed-in user (no workspace role). Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"cursor","in":"query","required":false,"schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"schema":{"default":25,"type":"integer","minimum":1,"maximum":100}},{"name":"q","in":"query","required":false,"schema":{"type":"string","maxLength":200}}],"security":[{"session":[]},{"apiKey":[]}],"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"items":{"type":"array","items":{"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)$"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"},"data":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}}},"required":["id","createdAt","updatedAt"],"additionalProperties":{}}},"nextCursor":{"type":["string","null"]}},"required":["items","nextCursor"]},"example":{"items":[{"id":"01990000-0000-7000-8000-000000000001","createdAt":"2026-09-19T12:00:00.000Z","updatedAt":"2026-09-19T12:00:00.000Z","data":{}}],"nextCursor":"example"}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/support","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/support","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/support","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/support","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/support","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/support","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/support","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/support","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/support","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/support","traceId":"request-id"}}}}}}},"/v1/support/{id}":{"get":{"operationId":"getSupportTicket","tags":["Support"],"summary":"One of the customer's tickets with its whole conversation","description":"Requires workspace role viewer or above. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"ticket":{"type":"object","properties":{"id":{"type":"string"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"},"topic":{"type":"string"},"status":{"type":"string"},"source":{"type":"string"},"lastMessageAt":{"type":"string"},"lastMessageBy":{"type":"string","enum":["customer","staff"]},"customerUnread":{"type":"boolean"},"staffUnread":{"type":"boolean"},"userId":{"type":["string","null"]},"workspaceId":{"type":["string","null"]},"email":{"type":["string","null"]},"name":{"type":["string","null"]}},"required":["id","createdAt","updatedAt","topic","status","source","lastMessageAt","lastMessageBy","customerUnread","staffUnread"]},"messages":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"author":{"type":"string","enum":["customer","staff"]},"body":{"type":"string"},"createdAt":{"type":"string"},"authorName":{"description":"Staff: first name for customers, full name for staff","type":["string","null"]}},"required":["id","author","body","createdAt","authorName"]},"description":"The ticket's own message first, then every reply, oldest first"}},"required":["ticket","messages"]},"example":{"ticket":{"id":"example","createdAt":"2026-09-19T12:00:00.000Z","updatedAt":"2026-09-19T12:00:00.000Z","topic":"example","status":"example","source":"example","lastMessageAt":"2026-09-19T12:00:00.000Z","lastMessageBy":"customer","customerUnread":true,"staffUnread":true,"userId":"example","workspaceId":"example","email":"example","name":"Noura"},"messages":[{"id":"example","author":"customer","body":"example","createdAt":"2026-09-19T12:00:00.000Z","authorName":"example"}]}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/support/{id}","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/support/{id}","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/support/{id}","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/support/{id}","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/support/{id}","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/support/{id}","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/support/{id}","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/support/{id}","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/support/{id}","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/support/{id}","traceId":"request-id"}}}}}}},"/v1/support/{id}/messages":{"post":{"operationId":"replySupport","tags":["Support"],"summary":"The customer answers; a resolved or closed ticket reopens and the support inbox is emailed","description":"Requires workspace role editor or above. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"X-CSRF-Token","in":"header","required":false,"description":"Required for cookie-authenticated mutations; returned by sign-in/sign-up.","schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"message":{"type":"string","minLength":1,"maxLength":5000}},"required":["message"]},"example":{"message":"example"}}}},"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"ticket":{"type":"object","properties":{"id":{"type":"string"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"},"topic":{"type":"string"},"status":{"type":"string"},"source":{"type":"string"},"lastMessageAt":{"type":"string"},"lastMessageBy":{"type":"string","enum":["customer","staff"]},"customerUnread":{"type":"boolean"},"staffUnread":{"type":"boolean"},"userId":{"type":["string","null"]},"workspaceId":{"type":["string","null"]},"email":{"type":["string","null"]},"name":{"type":["string","null"]}},"required":["id","createdAt","updatedAt","topic","status","source","lastMessageAt","lastMessageBy","customerUnread","staffUnread"]},"messages":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"author":{"type":"string","enum":["customer","staff"]},"body":{"type":"string"},"createdAt":{"type":"string"},"authorName":{"description":"Staff: first name for customers, full name for staff","type":["string","null"]}},"required":["id","author","body","createdAt","authorName"]},"description":"The ticket's own message first, then every reply, oldest first"}},"required":["ticket","messages"]},"example":{"ticket":{"id":"example","createdAt":"2026-09-19T12:00:00.000Z","updatedAt":"2026-09-19T12:00:00.000Z","topic":"example","status":"example","source":"example","lastMessageAt":"2026-09-19T12:00:00.000Z","lastMessageBy":"customer","customerUnread":true,"staffUnread":true,"userId":"example","workspaceId":"example","email":"example","name":"Noura"},"messages":[{"id":"example","author":"customer","body":"example","createdAt":"2026-09-19T12:00:00.000Z","authorName":"example"}]}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/support/{id}/messages","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/support/{id}/messages","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/support/{id}/messages","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/support/{id}/messages","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/support/{id}/messages","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/support/{id}/messages","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/support/{id}/messages","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/support/{id}/messages","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/support/{id}/messages","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/support/{id}/messages","traceId":"request-id"}}}}}}},"/v1/support/{id}/read":{"post":{"operationId":"readSupport","tags":["Support"],"summary":"The customer opened the ticket: staff replies and their notifications are marked read","description":"Requires workspace role editor or above. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"X-CSRF-Token","in":"header","required":false,"description":"Required for cookie-authenticated mutations; returned by sign-in/sign-up.","schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"ok":{"type":"boolean"}},"required":["ok"]},"example":{"ok":true}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/support/{id}/read","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/support/{id}/read","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/support/{id}/read","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/support/{id}/read","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/support/{id}/read","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/support/{id}/read","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/support/{id}/read","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/support/{id}/read","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/support/{id}/read","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/support/{id}/read","traceId":"request-id"}}}}}}},"/v1/waitlist":{"post":{"operationId":"joinWaitlist","tags":["Homepage"],"summary":"join Waitlist","description":"Acts on the signed-in user (no workspace role). Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"X-CSRF-Token","in":"header","required":false,"description":"Required for cookie-authenticated mutations; returned by sign-in/sign-up.","schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"feature":{"type":"string","enum":["dubbing","commercial"]},"phone":{"type":"string","pattern":"^\\+\\d{1,4}[ ]?\\d{6,14}$"},"need":{"type":"string","enum":["ads","ivr","video","corporate","other"]},"details":{"type":"string","maxLength":500}},"required":["feature","phone","need"]},"example":{"feature":"dubbing","phone":"example","need":"ads","details":"example"}}}},"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","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)$"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"},"data":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}}},"required":["id","createdAt","updatedAt"],"additionalProperties":{}},"example":{"id":"01990000-0000-7000-8000-000000000001","createdAt":"2026-09-19T12:00:00.000Z","updatedAt":"2026-09-19T12:00:00.000Z","data":{}}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/waitlist","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/waitlist","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/waitlist","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/waitlist","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/waitlist","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/waitlist","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/waitlist","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/waitlist","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/waitlist","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/waitlist","traceId":"request-id"}}}}}},"get":{"operationId":"listWaitlist","tags":["Homepage"],"summary":"list Waitlist","description":"Acts on the signed-in user (no workspace role). Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false}],"security":[{"session":[]},{"apiKey":[]}],"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"items":{"type":"array","items":{"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)$"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"},"data":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}}},"required":["id","createdAt","updatedAt"],"additionalProperties":{}}},"nextCursor":{"type":["string","null"]}},"required":["items","nextCursor"]},"example":{"items":[{"id":"01990000-0000-7000-8000-000000000001","createdAt":"2026-09-19T12:00:00.000Z","updatedAt":"2026-09-19T12:00:00.000Z","data":{}}],"nextCursor":"example"}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/waitlist","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/waitlist","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/waitlist","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/waitlist","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/waitlist","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/waitlist","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/waitlist","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/waitlist","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/waitlist","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/waitlist","traceId":"request-id"}}}}}}},"/v1/waitlist/{feature}":{"delete":{"operationId":"leaveWaitlist","tags":["Homepage"],"summary":"leave Waitlist","description":"Acts on the signed-in user (no workspace role). Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"feature","in":"path","required":true,"schema":{"type":"string"}},{"name":"X-CSRF-Token","in":"header","required":false,"description":"Required for cookie-authenticated mutations; returned by sign-in/sign-up.","schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"ok":{"type":"boolean"}},"required":["ok"]},"example":{"ok":true}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/waitlist/{feature}","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/waitlist/{feature}","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/waitlist/{feature}","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/waitlist/{feature}","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/waitlist/{feature}","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/waitlist/{feature}","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/waitlist/{feature}","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/waitlist/{feature}","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/waitlist/{feature}","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/waitlist/{feature}","traceId":"request-id"}}}}}}},"/v1/me/export":{"get":{"operationId":"exportMe","tags":["Settings: Account"],"summary":"export Me","description":"Acts on the signed-in user (no workspace role). Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false}],"security":[{"session":[]},{"apiKey":[]}],"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","propertyNames":{"type":"string"},"additionalProperties":{}},"example":{}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/me/export","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/me/export","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/me/export","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/me/export","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/me/export","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/me/export","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/me/export","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/me/export","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/me/export","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/me/export","traceId":"request-id"}}}}}}},"/v1/me/onboarding":{"get":{"operationId":"getOnboarding","tags":["Sign up & onboarding"],"summary":"get Onboarding","description":"Acts on the signed-in user (no workspace role). Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false}],"security":[{"session":[]},{"apiKey":[]}],"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"items":{"type":"array","items":{"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)$"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"},"data":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}}},"required":["id","createdAt","updatedAt"],"additionalProperties":{}}},"nextCursor":{"type":["string","null"]}},"required":["items","nextCursor"]},"example":{"items":[{"id":"01990000-0000-7000-8000-000000000001","createdAt":"2026-09-19T12:00:00.000Z","updatedAt":"2026-09-19T12:00:00.000Z","data":{}}],"nextCursor":"example"}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/me/onboarding","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/me/onboarding","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/me/onboarding","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/me/onboarding","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/me/onboarding","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/me/onboarding","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/me/onboarding","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/me/onboarding","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/me/onboarding","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/me/onboarding","traceId":"request-id"}}}}}}},"/v1/me/onboarding/{step}":{"put":{"operationId":"saveOnboarding","tags":["Sign up & onboarding"],"summary":"save Onboarding","description":"Acts on the signed-in user (no workspace role). Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"step","in":"path","required":true,"schema":{"type":"string"}},{"name":"X-CSRF-Token","in":"header","required":false,"description":"Required for cookie-authenticated mutations; returned by sign-in/sign-up.","schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":100},"phone":{"type":"string"},"region":{"type":"string"},"goals":{"type":"array","items":{"type":"string","enum":["content-creation","audiobooks","customer-support","gaming","api-integration","accessibility","marketing","virtual-assistants"]}},"language":{"type":"string"},"accent":{"type":"string"},"gender":{"type":"string"},"style":{"type":"string"},"planId":{"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)$"}}},"example":{"name":"Noura","phone":"example","region":"example","goals":["content-creation"],"language":"ar","accent":"example","gender":"example","style":"example","planId":"01990000-0000-7000-8000-000000000001"}}}},"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","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)$"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"},"data":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}}},"required":["id","createdAt","updatedAt"],"additionalProperties":{}},"example":{"id":"01990000-0000-7000-8000-000000000001","createdAt":"2026-09-19T12:00:00.000Z","updatedAt":"2026-09-19T12:00:00.000Z","data":{}}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/me/onboarding/{step}","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/me/onboarding/{step}","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/me/onboarding/{step}","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/me/onboarding/{step}","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/me/onboarding/{step}","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/me/onboarding/{step}","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/me/onboarding/{step}","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/me/onboarding/{step}","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/me/onboarding/{step}","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/me/onboarding/{step}","traceId":"request-id"}}}}}}},"/v1/me/experiments/chatgpt-landing":{"post":{"operationId":"enrollChatGptLanding","tags":["Sign up & onboarding"],"summary":"Enrol the signed-in person in the chatgpt-landing experiment (called once the onboarding plan step shows, for a ChatGPT first touch). Idempotent: the arm is decided once (sha256 bucket), stored on the account and returned on every call. arm null = the usual flow (account older than 2 hours, staff account, or the experiment is off; an earlier assignment is kept)","description":"Acts on the signed-in user (no workspace role). Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"X-CSRF-Token","in":"header","required":false,"description":"Required for cookie-authenticated mutations; returned by sign-in/sign-up.","schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"source":{"type":"string","const":"chatgpt","description":"The client detected a ChatGPT first touch (utm_source, referrer or the analytics first visit)"}},"required":["source"],"additionalProperties":false},"example":{"source":"chatgpt"}}}},"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"arm":{"anyOf":[{"type":"string","enum":["control","variant"]},{"type":"null"}],"description":"The arm to show now; null = the usual flow (not eligible, or the experiment is off)"},"enrolled":{"type":"boolean","description":"Taking part now (newly or earlier enrolled, experiment on)"}},"required":["arm","enrolled"]},"example":{"arm":"control","enrolled":true}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/me/experiments/chatgpt-landing","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/me/experiments/chatgpt-landing","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/me/experiments/chatgpt-landing","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/me/experiments/chatgpt-landing","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/me/experiments/chatgpt-landing","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/me/experiments/chatgpt-landing","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/me/experiments/chatgpt-landing","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/me/experiments/chatgpt-landing","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/me/experiments/chatgpt-landing","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/me/experiments/chatgpt-landing","traceId":"request-id"}}}}}}},"/v1/catalog":{"get":{"operationId":"getCatalog","tags":["Homepage"],"summary":"get Catalog","description":"Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false}],"security":[],"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"models":{"type":"array","items":{"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)$"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"},"data":{"default":{},"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}},"slug":{"type":"string","minLength":1,"maxLength":100},"name":{"type":"object","properties":{"ar":{"type":"string","minLength":1},"en":{"type":"string","minLength":1}},"required":["ar","en"]},"description":{"type":"object","properties":{"ar":{"type":"string","minLength":1},"en":{"type":"string","minLength":1}},"required":["ar","en"]},"creditRate":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"languages":{"minItems":1,"type":"array","items":{"type":"string"}},"estimatedSeconds":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"maxChars":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"ttsCreditRate":{"description":"Credits per 1,000 characters this workspace pays for text to speech (lower on paid plans); creditRate when absent","type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"tagSupport":{"description":"How this model handles inline emotion and delivery tags","type":"string","enum":["native","approximate","none"]}},"required":["id","createdAt","updatedAt","slug","name","description","creditRate","languages","estimatedSeconds","maxChars"],"additionalProperties":{}}},"uploadLimits":{"type":"object","properties":{"acceptedMimeTypes":{"type":"array","items":{"type":"string"}},"maxBytes":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"maxDurationSeconds":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"imageMaxBytes":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"maxImagePixels":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"avatarSize":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}},"required":["acceptedMimeTypes","maxBytes","maxDurationSeconds","imageMaxBytes","maxImagePixels","avatarSize"]},"categories":{"type":"array","items":{"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)$"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"},"data":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}}},"required":["id","createdAt","updatedAt"],"additionalProperties":{}}},"onboardingGoals":{"type":"array","items":{"type":"string"}},"cancellationReasons":{"type":"array","items":{"type":"string"}},"notificationPreferences":{"type":"array","items":{"type":"string"}},"capabilities":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"supported":{"type":"array","items":{"type":"string"}},"capabilities":{"type":"object","properties":{"music":{"type":"object","properties":{"vocals":{"type":"boolean"}},"required":["vocals"]},"cleaner":{"type":"object","properties":{"modes":{"type":"array","items":{"type":"string","enum":["denoise","stems"]}},"strength":{"type":"boolean"}},"required":["modes","strength"]},"assistant":{"type":"object","properties":{"text":{"type":"boolean"},"streaming":{"type":"boolean"},"audio":{"type":"boolean"},"realtime":{"type":"boolean"}},"required":["text","streaming","audio","realtime"]}},"additionalProperties":{}},"routes":{"type":"array","items":{"type":"object","properties":{"productModelId":{"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)$"},"capability":{"type":"string"},"features":{"type":"object","properties":{"music":{"type":"object","properties":{"vocals":{"type":"boolean"}},"required":["vocals"]},"cleaner":{"type":"object","properties":{"modes":{"type":"array","items":{"type":"string","enum":["denoise","stems"]}},"strength":{"type":"boolean"}},"required":["modes","strength"]},"assistant":{"type":"object","properties":{"text":{"type":"boolean"},"streaming":{"type":"boolean"},"audio":{"type":"boolean"},"realtime":{"type":"boolean"}},"required":["text","streaming","audio","realtime"]}},"additionalProperties":{}}},"required":["productModelId","capability","features"]}}},"required":["id","supported","capabilities","routes"]}}},"required":["models","uploadLimits","categories","onboardingGoals","cancellationReasons","notificationPreferences","capabilities"]},"example":{"models":[{"id":"01990000-0000-7000-8000-000000000001","createdAt":"2026-09-19T12:00:00.000Z","updatedAt":"2026-09-19T12:00:00.000Z","data":{},"slug":"example","name":{"ar":"مثال","en":"example"},"description":{"ar":"مثال","en":"example"},"creditRate":1,"languages":["example"],"estimatedSeconds":1,"maxChars":1,"ttsCreditRate":1,"tagSupport":"native"}],"uploadLimits":{"acceptedMimeTypes":["example"],"maxBytes":-9007199254740991,"maxDurationSeconds":-9007199254740991,"imageMaxBytes":-9007199254740991,"maxImagePixels":-9007199254740991,"avatarSize":-9007199254740991},"categories":[{"id":"01990000-0000-7000-8000-000000000001","createdAt":"2026-09-19T12:00:00.000Z","updatedAt":"2026-09-19T12:00:00.000Z","data":{}}],"onboardingGoals":["example"],"cancellationReasons":["example"],"notificationPreferences":["example"],"capabilities":[{"id":"example","supported":["example"],"capabilities":{"music":{"vocals":true},"cleaner":{"modes":["denoise"],"strength":true},"assistant":{"text":true,"streaming":true,"audio":true,"realtime":true}},"routes":[{"productModelId":"01990000-0000-7000-8000-000000000001","capability":"example","features":{"music":{"vocals":true},"cleaner":{"modes":["denoise"],"strength":true},"assistant":{"text":true,"streaming":true,"audio":true,"realtime":true}}}]}]}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/catalog","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/catalog","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/catalog","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/catalog","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/catalog","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/catalog","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/catalog","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/catalog","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/catalog","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/catalog","traceId":"request-id"}}}}}}},"/v1/voices":{"get":{"operationId":"listVoices","tags":["Explore voices"],"summary":"list Voices","description":"Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"cursor","in":"query","required":false,"schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"schema":{"default":25,"type":"integer","minimum":1,"maximum":100}},{"name":"q","in":"query","required":false,"schema":{"type":"string","maxLength":200}},{"name":"lang","in":"query","required":false,"schema":{"type":"string"}},{"name":"dialect","in":"query","required":false,"schema":{"type":"string"}},{"name":"accent","in":"query","required":false,"schema":{"type":"string"}},{"name":"gender","in":"query","required":false,"schema":{"type":"string"}},{"name":"age","in":"query","required":false,"schema":{"type":"string"}},{"name":"category","in":"query","required":false,"schema":{"type":"string"}},{"name":"noticePeriod","in":"query","required":false,"schema":{"type":"number"}},{"name":"sort","in":"query","required":false,"schema":{"default":"trending","type":"string","enum":["trending","newest","usage","name"]}},{"name":"useCase","in":"query","required":false,"schema":{"type":"string"}},{"name":"mine","in":"query","required":false,"schema":{"type":"string"}},{"name":"saved","in":"query","required":false,"schema":{"type":"string"}},{"name":"cloned","in":"query","required":false,"schema":{"description":"Cloned voices of this workspace, including ones still building or failed","type":"string"}},{"name":"premium","in":"query","required":false,"schema":{"description":"Only the premium voices (marked by the admin; paid plans only)","type":"string"}}],"security":[],"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"items":{"type":"array","items":{"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)$"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"},"data":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}},"slug":{"type":"string"},"name":{"type":"object","properties":{"ar":{"type":"string","minLength":1},"en":{"type":"string","minLength":1}},"required":["ar","en"]},"description":{"type":"object","properties":{"ar":{"type":"string","minLength":1},"en":{"type":"string","minLength":1}},"required":["ar","en"]},"language":{"type":"string"},"dialect":{"type":"string"},"accent":{"type":"string"},"gender":{"type":"string"},"age":{"type":"string"},"category":{"type":"string"},"tags":{"type":"array","items":{"type":"string"}},"isPublic":{"type":"boolean"},"trendingScore":{"type":"number"},"usageCount":{"type":"number"},"noticePeriod":{"type":"number"},"sampleUrl":{"type":["string","null"]},"sampleDialect":{"description":"The dialect the sample is read in (it can differ from dialect)","type":["string","null"]},"saved":{"type":"boolean"},"owned":{"type":"boolean"},"ownerId":{"anyOf":[{"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)$"},{"type":"null"}]},"workspaceId":{"anyOf":[{"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)$"},{"type":"null"}]},"premium":{"type":"boolean","description":"A catalogue voice the admin marked premium; needs a plan with premium voices"},"locked":{"type":"boolean","description":"Premium, and this workspace’s plan does not include premium voices (sample still playable)"}},"required":["id","createdAt","updatedAt","slug","name","description","language","dialect","accent","gender","age","category","tags","isPublic","trendingScore","usageCount","noticePeriod","saved","owned","ownerId","workspaceId","premium","locked"],"additionalProperties":{}}},"nextCursor":{"type":["string","null"]}},"required":["items","nextCursor"]},"example":{"items":[{"id":"01990000-0000-7000-8000-000000000001","createdAt":"2026-09-19T12:00:00.000Z","updatedAt":"2026-09-19T12:00:00.000Z","data":{},"slug":"example","name":{"ar":"مثال","en":"example"},"description":{"ar":"مثال","en":"example"},"language":"ar","dialect":"ar-SA","accent":"example","gender":"example","age":"example","category":"example","tags":["example"],"isPublic":true,"trendingScore":1,"usageCount":1,"noticePeriod":1,"sampleUrl":"http://localhost:4000/example","sampleDialect":"example","saved":true,"owned":true,"ownerId":"01990000-0000-7000-8000-000000000001","workspaceId":"01990000-0000-7000-8000-000000000001","premium":true,"locked":true}],"nextCursor":"example"}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/voices","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/voices","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/voices","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/voices","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/voices","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/voices","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/voices","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/voices","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/voices","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/voices","traceId":"request-id"}}}}}}},"/v1/voices/{id}":{"get":{"operationId":"getVoice","tags":["Explore voices"],"summary":"get Voice","description":"Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"security":[],"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","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)$"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"},"data":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}},"slug":{"type":"string"},"name":{"type":"object","properties":{"ar":{"type":"string","minLength":1},"en":{"type":"string","minLength":1}},"required":["ar","en"]},"description":{"type":"object","properties":{"ar":{"type":"string","minLength":1},"en":{"type":"string","minLength":1}},"required":["ar","en"]},"language":{"type":"string"},"dialect":{"type":"string"},"accent":{"type":"string"},"gender":{"type":"string"},"age":{"type":"string"},"category":{"type":"string"},"tags":{"type":"array","items":{"type":"string"}},"isPublic":{"type":"boolean"},"trendingScore":{"type":"number"},"usageCount":{"type":"number"},"noticePeriod":{"type":"number"},"sampleUrl":{"type":["string","null"]},"sampleDialect":{"description":"The dialect the sample is read in (it can differ from dialect)","type":["string","null"]},"saved":{"type":"boolean"},"owned":{"type":"boolean"},"ownerId":{"anyOf":[{"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)$"},{"type":"null"}]},"workspaceId":{"anyOf":[{"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)$"},{"type":"null"}]},"premium":{"type":"boolean","description":"A catalogue voice the admin marked premium; needs a plan with premium voices"},"locked":{"type":"boolean","description":"Premium, and this workspace’s plan does not include premium voices (sample still playable)"}},"required":["id","createdAt","updatedAt","slug","name","description","language","dialect","accent","gender","age","category","tags","isPublic","trendingScore","usageCount","noticePeriod","saved","owned","ownerId","workspaceId","premium","locked"],"additionalProperties":{}},"example":{"id":"01990000-0000-7000-8000-000000000001","createdAt":"2026-09-19T12:00:00.000Z","updatedAt":"2026-09-19T12:00:00.000Z","data":{},"slug":"example","name":{"ar":"مثال","en":"example"},"description":{"ar":"مثال","en":"example"},"language":"ar","dialect":"ar-SA","accent":"example","gender":"example","age":"example","category":"example","tags":["example"],"isPublic":true,"trendingScore":1,"usageCount":1,"noticePeriod":1,"sampleUrl":"http://localhost:4000/example","sampleDialect":"example","saved":true,"owned":true,"ownerId":"01990000-0000-7000-8000-000000000001","workspaceId":"01990000-0000-7000-8000-000000000001","premium":true,"locked":true}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/voices/{id}","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/voices/{id}","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/voices/{id}","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/voices/{id}","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/voices/{id}","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/voices/{id}","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/voices/{id}","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/voices/{id}","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/voices/{id}","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/voices/{id}","traceId":"request-id"}}}}}},"patch":{"operationId":"updateVoice","tags":["Explore voices"],"summary":"update Voice","description":"Requires workspace role editor or above. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"X-CSRF-Token","in":"header","required":false,"description":"Required for cookie-authenticated mutations; returned by sign-in/sign-up.","schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"name":{"type":"object","properties":{"ar":{"type":"string","minLength":1},"en":{"type":"string","minLength":1}},"required":["ar","en"]},"description":{"type":"object","properties":{"ar":{"type":"string","minLength":1},"en":{"type":"string","minLength":1}},"required":["ar","en"]},"category":{"type":"string","minLength":1,"maxLength":100},"gender":{"type":"string","enum":["male","female","neutral"]},"age":{"type":"string","minLength":1,"maxLength":50},"accent":{"type":"string","minLength":1,"maxLength":100},"tags":{"maxItems":30,"type":"array","items":{"type":"string"}}}},"example":{"name":{"ar":"مثال","en":"example"},"description":{"ar":"مثال","en":"example"},"category":"example","gender":"male","age":"example","accent":"example","tags":["example"]}}}},"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","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)$"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"},"data":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}},"slug":{"type":"string"},"name":{"type":"object","properties":{"ar":{"type":"string","minLength":1},"en":{"type":"string","minLength":1}},"required":["ar","en"]},"description":{"type":"object","properties":{"ar":{"type":"string","minLength":1},"en":{"type":"string","minLength":1}},"required":["ar","en"]},"language":{"type":"string"},"dialect":{"type":"string"},"accent":{"type":"string"},"gender":{"type":"string"},"age":{"type":"string"},"category":{"type":"string"},"tags":{"type":"array","items":{"type":"string"}},"isPublic":{"type":"boolean"},"trendingScore":{"type":"number"},"usageCount":{"type":"number"},"noticePeriod":{"type":"number"},"sampleUrl":{"type":["string","null"]},"sampleDialect":{"description":"The dialect the sample is read in (it can differ from dialect)","type":["string","null"]},"saved":{"type":"boolean"},"owned":{"type":"boolean"},"ownerId":{"anyOf":[{"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)$"},{"type":"null"}]},"workspaceId":{"anyOf":[{"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)$"},{"type":"null"}]},"premium":{"type":"boolean","description":"A catalogue voice the admin marked premium; needs a plan with premium voices"},"locked":{"type":"boolean","description":"Premium, and this workspace’s plan does not include premium voices (sample still playable)"}},"required":["id","createdAt","updatedAt","slug","name","description","language","dialect","accent","gender","age","category","tags","isPublic","trendingScore","usageCount","noticePeriod","saved","owned","ownerId","workspaceId","premium","locked"],"additionalProperties":{}},"example":{"id":"01990000-0000-7000-8000-000000000001","createdAt":"2026-09-19T12:00:00.000Z","updatedAt":"2026-09-19T12:00:00.000Z","data":{},"slug":"example","name":{"ar":"مثال","en":"example"},"description":{"ar":"مثال","en":"example"},"language":"ar","dialect":"ar-SA","accent":"example","gender":"example","age":"example","category":"example","tags":["example"],"isPublic":true,"trendingScore":1,"usageCount":1,"noticePeriod":1,"sampleUrl":"http://localhost:4000/example","sampleDialect":"example","saved":true,"owned":true,"ownerId":"01990000-0000-7000-8000-000000000001","workspaceId":"01990000-0000-7000-8000-000000000001","premium":true,"locked":true}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/voices/{id}","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/voices/{id}","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/voices/{id}","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/voices/{id}","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/voices/{id}","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/voices/{id}","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/voices/{id}","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/voices/{id}","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/voices/{id}","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/voices/{id}","traceId":"request-id"}}}}}},"delete":{"operationId":"deleteVoice","tags":["Explore voices"],"summary":"delete Voice","description":"Requires workspace role editor or above. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"X-CSRF-Token","in":"header","required":false,"description":"Required for cookie-authenticated mutations; returned by sign-in/sign-up.","schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"ok":{"type":"boolean"}},"required":["ok"]},"example":{"ok":true}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/voices/{id}","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/voices/{id}","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/voices/{id}","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/voices/{id}","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/voices/{id}","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/voices/{id}","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/voices/{id}","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/voices/{id}","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/voices/{id}","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/voices/{id}","traceId":"request-id"}}}}}}},"/v1/voices/{id}/save":{"post":{"operationId":"saveVoice","tags":["Explore voices"],"summary":"save Voice","description":"Requires workspace role viewer or above. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"X-CSRF-Token","in":"header","required":false,"description":"Required for cookie-authenticated mutations; returned by sign-in/sign-up.","schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"ok":{"type":"boolean"}},"required":["ok"]},"example":{"ok":true}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/voices/{id}/save","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/voices/{id}/save","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/voices/{id}/save","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/voices/{id}/save","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/voices/{id}/save","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/voices/{id}/save","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/voices/{id}/save","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/voices/{id}/save","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/voices/{id}/save","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/voices/{id}/save","traceId":"request-id"}}}}}},"delete":{"operationId":"unsaveVoice","tags":["Explore voices"],"summary":"unsave Voice","description":"Requires workspace role viewer or above. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"X-CSRF-Token","in":"header","required":false,"description":"Required for cookie-authenticated mutations; returned by sign-in/sign-up.","schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"ok":{"type":"boolean"}},"required":["ok"]},"example":{"ok":true}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/voices/{id}/save","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/voices/{id}/save","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/voices/{id}/save","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/voices/{id}/save","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/voices/{id}/save","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/voices/{id}/save","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/voices/{id}/save","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/voices/{id}/save","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/voices/{id}/save","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/voices/{id}/save","traceId":"request-id"}}}}}}},"/v1/voices/clones/limits":{"get":{"operationId":"getVoiceCloneLimits","tags":["Explore voices"],"summary":"get Voice Clone Limits","description":"Requires workspace role viewer or above. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false}],"security":[{"session":[]},{"apiKey":[]}],"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"available":{"type":"boolean"},"enabled":{"type":"boolean"},"allowed":{"type":"number"},"used":{"type":"number"}},"required":["available","enabled","allowed","used"]},"example":{"available":true,"enabled":true,"allowed":1,"used":1}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/voices/clones/limits","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/voices/clones/limits","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/voices/clones/limits","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/voices/clones/limits","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/voices/clones/limits","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/voices/clones/limits","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/voices/clones/limits","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/voices/clones/limits","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/voices/clones/limits","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/voices/clones/limits","traceId":"request-id"}}}}}}},"/v1/voices/clones":{"post":{"operationId":"createVoiceClone","tags":["Explore voices"],"summary":"create Voice Clone","description":"Requires workspace role editor or above. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"X-CSRF-Token","in":"header","required":false,"description":"Required for cookie-authenticated mutations; returned by sign-in/sign-up.","schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":80},"description":{"type":"string","maxLength":500},"dialect":{"type":"string","minLength":1,"maxLength":20},"gender":{"type":"string","enum":["male","female","neutral"]},"age":{"type":"string","minLength":1,"maxLength":50},"category":{"type":"string","minLength":1,"maxLength":100},"uploadIds":{"minItems":1,"maxItems":20,"type":"array","items":{"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)$"}},"consent":{"type":"object","properties":{"basis":{"type":"string","enum":["self","permission"],"description":"self = the user’s own voice; permission = someone who gave written permission"},"speakerName":{"description":"Required when basis is permission","type":"string","maxLength":120},"confirmed":{"type":"boolean","const":true},"notPublicFigure":{"type":"boolean","const":true},"policyVersion":{"type":"string","minLength":1,"maxLength":20}},"required":["basis","confirmed","notPublicFigure","policyVersion"]}},"required":["name","dialect","uploadIds","consent"]},"example":{"name":"Noura","description":"example","dialect":"ar-SA","gender":"male","age":"example","category":"example","uploadIds":["01990000-0000-7000-8000-000000000001"],"consent":{"basis":"self","speakerName":"example","confirmed":true,"notPublicFigure":true,"policyVersion":"example"}}}}},"responses":{"201":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","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)$"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"},"data":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}}},"required":["id","createdAt","updatedAt"],"additionalProperties":{}},"example":{"id":"01990000-0000-7000-8000-000000000001","createdAt":"2026-09-19T12:00:00.000Z","updatedAt":"2026-09-19T12:00:00.000Z","data":{}}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/voices/clones","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/voices/clones","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/voices/clones","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/voices/clones","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/voices/clones","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/voices/clones","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/voices/clones","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/voices/clones","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/voices/clones","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/voices/clones","traceId":"request-id"}}}}}}},"/v1/pronunciations":{"get":{"operationId":"listPronunciations","tags":["Pronunciation"],"summary":"list Pronunciations","description":"Requires workspace role viewer or above. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"cursor","in":"query","required":false,"schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"schema":{"default":25,"type":"integer","minimum":1,"maximum":100}},{"name":"q","in":"query","required":false,"schema":{"type":"string","maxLength":200}}],"security":[{"session":[]},{"apiKey":[]}],"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"items":{"type":"array","items":{"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)$"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"},"data":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}},"term":{"type":"string"},"say":{"type":"string"},"note":{"type":["string","null"]}},"required":["id","createdAt","updatedAt","term","say","note"],"additionalProperties":{}}},"nextCursor":{"type":["string","null"]}},"required":["items","nextCursor"]},"example":{"items":[{"id":"01990000-0000-7000-8000-000000000001","createdAt":"2026-09-19T12:00:00.000Z","updatedAt":"2026-09-19T12:00:00.000Z","data":{},"term":"example","say":"example","note":"example"}],"nextCursor":"example"}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/pronunciations","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/pronunciations","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/pronunciations","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/pronunciations","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/pronunciations","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/pronunciations","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/pronunciations","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/pronunciations","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/pronunciations","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/pronunciations","traceId":"request-id"}}}}}},"post":{"operationId":"createPronunciation","tags":["Pronunciation"],"summary":"create Pronunciation","description":"Requires workspace role editor or above. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"X-CSRF-Token","in":"header","required":false,"description":"Required for cookie-authenticated mutations; returned by sign-in/sign-up.","schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"term":{"type":"string","minLength":1,"maxLength":100,"description":"Word or phrase as written in scripts"},"say":{"type":"string","minLength":1,"maxLength":200,"description":"How to say it: a vowelled (tashkeel) or phonetic spelling"},"note":{"type":"string","maxLength":300}},"required":["term","say"]},"example":{"term":"example","say":"example","note":"example"}}}},"responses":{"201":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","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)$"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"},"data":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}},"term":{"type":"string"},"say":{"type":"string"},"note":{"type":["string","null"]}},"required":["id","createdAt","updatedAt","term","say","note"],"additionalProperties":{}},"example":{"id":"01990000-0000-7000-8000-000000000001","createdAt":"2026-09-19T12:00:00.000Z","updatedAt":"2026-09-19T12:00:00.000Z","data":{},"term":"example","say":"example","note":"example"}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/pronunciations","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/pronunciations","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/pronunciations","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/pronunciations","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/pronunciations","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/pronunciations","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/pronunciations","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/pronunciations","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/pronunciations","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/pronunciations","traceId":"request-id"}}}}}}},"/v1/pronunciations/{id}":{"patch":{"operationId":"updatePronunciation","tags":["Pronunciation"],"summary":"update Pronunciation","description":"Requires workspace role editor or above. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"X-CSRF-Token","in":"header","required":false,"description":"Required for cookie-authenticated mutations; returned by sign-in/sign-up.","schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"term":{"type":"string","minLength":1,"maxLength":100,"description":"Word or phrase as written in scripts"},"say":{"type":"string","minLength":1,"maxLength":200,"description":"How to say it: a vowelled (tashkeel) or phonetic spelling"},"note":{"type":"string","maxLength":300}}},"example":{"term":"example","say":"example","note":"example"}}}},"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","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)$"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"},"data":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}},"term":{"type":"string"},"say":{"type":"string"},"note":{"type":["string","null"]}},"required":["id","createdAt","updatedAt","term","say","note"],"additionalProperties":{}},"example":{"id":"01990000-0000-7000-8000-000000000001","createdAt":"2026-09-19T12:00:00.000Z","updatedAt":"2026-09-19T12:00:00.000Z","data":{},"term":"example","say":"example","note":"example"}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/pronunciations/{id}","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/pronunciations/{id}","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/pronunciations/{id}","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/pronunciations/{id}","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/pronunciations/{id}","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/pronunciations/{id}","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/pronunciations/{id}","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/pronunciations/{id}","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/pronunciations/{id}","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/pronunciations/{id}","traceId":"request-id"}}}}}},"delete":{"operationId":"deletePronunciation","tags":["Pronunciation"],"summary":"delete Pronunciation","description":"Requires workspace role editor or above. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"X-CSRF-Token","in":"header","required":false,"description":"Required for cookie-authenticated mutations; returned by sign-in/sign-up.","schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"ok":{"type":"boolean"}},"required":["ok"]},"example":{"ok":true}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/pronunciations/{id}","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/pronunciations/{id}","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/pronunciations/{id}","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/pronunciations/{id}","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/pronunciations/{id}","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/pronunciations/{id}","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/pronunciations/{id}","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/pronunciations/{id}","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/pronunciations/{id}","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/pronunciations/{id}","traceId":"request-id"}}}}}}},"/v1/text/tashkeel":{"post":{"operationId":"diacritizeText","tags":["Pronunciation"],"summary":"Add Arabic diacritics (tashkeel) to a script; the workspace dictionary wins where it has an entry","description":"Requires workspace role editor or above. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"X-CSRF-Token","in":"header","required":false,"description":"Required for cookie-authenticated mutations; returned by sign-in/sign-up.","schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"text":{"type":"string","minLength":1,"maxLength":5000},"locale":{"default":"ar","type":"string","maxLength":20}},"required":["text"]},"example":{"text":"مرحباً بك في فوكلا.","locale":"ar"}}}},"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"text":{"type":"string"},"changed":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Words that gained or changed diacritics"}},"required":["text","changed"]},"example":{"text":"مرحباً بك في فوكلا.","changed":-9007199254740991}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/text/tashkeel","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/text/tashkeel","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/text/tashkeel","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/text/tashkeel","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/text/tashkeel","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/text/tashkeel","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/text/tashkeel","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/text/tashkeel","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/text/tashkeel","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/text/tashkeel","traceId":"request-id"}}}}}}},"/v1/text/pronunciation-candidates":{"post":{"operationId":"suggestPronunciations","tags":["Pronunciation"],"summary":"Possible vowellings of one word, most likely first, with a short meaning each","description":"Requires workspace role editor or above. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"X-CSRF-Token","in":"header","required":false,"description":"Required for cookie-authenticated mutations; returned by sign-in/sign-up.","schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"word":{"type":"string","minLength":1,"maxLength":60},"context":{"type":"string","maxLength":500},"locale":{"default":"ar","type":"string","maxLength":20}},"required":["word"]},"example":{"word":"example","context":"example","locale":"ar"}}}},"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"word":{"type":"string"},"candidates":{"type":"array","items":{"type":"object","properties":{"text":{"type":"string","description":"Vowelled spelling"},"meaning":{"type":"string","description":"Short gloss in the UI locale"},"likely":{"type":"boolean"}},"required":["text","meaning","likely"]}}},"required":["word","candidates"]},"example":{"word":"example","candidates":[{"text":"مرحباً بك في فوكلا.","meaning":"example","likely":true}]}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/text/pronunciation-candidates","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/text/pronunciation-candidates","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/text/pronunciation-candidates","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/text/pronunciation-candidates","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/text/pronunciation-candidates","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/text/pronunciation-candidates","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/text/pronunciation-candidates","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/text/pronunciation-candidates","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/text/pronunciation-candidates","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/text/pronunciation-candidates","traceId":"request-id"}}}}}}},"/v1/tts/tags":{"get":{"operationId":"listTtsTags","tags":["Text to speech"],"summary":"Directions, vendor sounds, spans and pauses that can be written inline in a script, which voices perform each, and Auto Tags availability","description":"Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false}],"security":[],"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"tags":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Canonical tag written in the script, e.g. laugh"},"kind":{"type":"string","enum":["delivery","emotion","event","pause"],"description":"The kind older apps know a tag by: delivery/emotion = a direction (holds until the next one or the paragraph end); event = a sound at that point; pause = silence"},"type":{"type":"string","enum":["direction","sound","span","pause"],"description":"direction = emotion or delivery, any text in square brackets (catalogue entries are suggestions); sound = a vendor vocal event; span = a paired tag around words; pause = silence"},"group":{"type":"string","description":"Palette section"},"label":{"type":"object","properties":{"ar":{"type":"string","minLength":1},"en":{"type":"string","minLength":1}},"required":["ar","en"]},"description":{"type":"object","properties":{"ar":{"type":"string","minLength":1},"en":{"type":"string","minLength":1}},"required":["ar","en"]},"aliases":{"type":"array","items":{"type":"string"},"description":"Other spellings accepted in the script, including Arabic (e.g. ضحكة)"},"example":{"type":"object","properties":{"ar":{"type":"string","minLength":1},"en":{"type":"string","minLength":1}},"required":["ar","en"]},"vendors":{"type":"array","items":{"type":"string","enum":["gemini","drama"],"description":"gemini = catalogue voices (Gemini 3.8 TTS); drama = cloned voices (Fish Audio Drama 3)"},"description":"Voices that perform it: gemini = catalogue voices, drama = cloned voices"},"reset":{"description":"[normal]: ends the current direction","type":"boolean"}},"required":["id","kind","type","group","label","description","aliases","example","vendors"]}},"spans":{"default":[],"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Written <id>words</id>"},"type":{"type":"string","const":"span"},"group":{"type":"string"},"label":{"type":"object","properties":{"ar":{"type":"string","minLength":1},"en":{"type":"string","minLength":1}},"required":["ar","en"]},"description":{"type":"object","properties":{"ar":{"type":"string","minLength":1},"en":{"type":"string","minLength":1}},"required":["ar","en"]},"aliases":{"type":"array","items":{"type":"string"}},"example":{"type":"object","properties":{"ar":{"type":"string","minLength":1},"en":{"type":"string","minLength":1}},"required":["ar","en"]},"vendors":{"type":"array","items":{"type":"string","enum":["gemini","drama"],"description":"gemini = catalogue voices (Gemini 3.8 TTS); drama = cloned voices (Fish Audio Drama 3)"}}},"required":["id","type","group","label","description","aliases","example","vendors"]}},"pause":{"type":"object","properties":{"min":{"type":"number"},"max":{"type":"number"},"default":{"type":"number"}},"required":["min","max","default"],"description":"Seconds for [pause] / [pause 1.5s]"},"maxTagsPerRequest":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"maxDirectionLength":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"version":{"type":"string"},"cloneVendor":{"anyOf":[{"type":"string","enum":["gemini","drama"],"description":"gemini = catalogue voices (Gemini 3.8 TTS); drama = cloned voices (Fish Audio Drama 3)"},{"type":"null"}],"description":"drama when cloned voices speak on Fish Drama 3 (tags performed); null when they speak words only"},"autoTags":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Auto Tags on for every plan that includes it"},"credits":{"type":"integer","minimum":1,"maximum":100000,"description":"Credits a run costs above the last word step (only when it adds tags)"},"tiers":{"description":"Word-count steps, shortest first; a script longer than the last step costs `credits`","maxItems":8,"type":"array","items":{"type":"object","properties":{"upToWords":{"type":"integer","minimum":1,"maximum":100000},"credits":{"type":"integer","minimum":1,"maximum":100000}},"required":["upToWords","credits"],"additionalProperties":false}}},"required":["enabled","credits"],"additionalProperties":false,"description":"Auto Tags availability and credits per run (plans.entitlements.autoTags unlocks it)"}},"required":["tags","pause","maxTagsPerRequest","maxDirectionLength","version","cloneVendor","autoTags"]},"example":{"tags":[{"id":"example","kind":"delivery","type":"direction","group":"example","label":{"ar":"مثال","en":"example"},"description":{"ar":"مثال","en":"example"},"aliases":["example"],"example":{"ar":"مثال","en":"example"},"vendors":["gemini"],"reset":true}],"spans":[],"pause":{"min":1,"max":1,"default":1},"maxTagsPerRequest":-9007199254740991,"maxDirectionLength":-9007199254740991,"version":"example","cloneVendor":"gemini","autoTags":{"enabled":true,"credits":1,"tiers":[{"upToWords":1,"credits":1}]}}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/tts/tags","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/tts/tags","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/tts/tags","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/tts/tags","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/tts/tags","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/tts/tags","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/tts/tags","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/tts/tags","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/tts/tags","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/tts/tags","traceId":"request-id"}}}}}}},"/v1/text/auto-tags":{"post":{"operationId":"autoTagText","tags":["Text to speech"],"summary":"Auto Tags: AI places directions, sounds, spans and pauses in a script for the voice that will speak it, words unchanged. Paid plans (403 errors[0].path=autoTags); costs the configured credits only when tags are added (402 INSUFFICIENT_CREDITS)","description":"Requires workspace role editor or above. Retry with the same Idempotency-Key and identical body. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"Idempotency-Key","in":"header","required":true,"schema":{"type":"string","maxLength":200},"example":"request-2026-001"},{"name":"X-CSRF-Token","in":"header","required":false,"description":"Required for cookie-authenticated mutations; returned by sign-in/sign-up.","schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"text":{"type":"string","minLength":1,"maxLength":12000,"description":"The script, tags already written in it are kept"},"voiceId":{"description":"The voice that will speak it (cloned voices are tagged for Drama 3, catalogue voices for Gemini)","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)$"},"intensity":{"default":"balanced","type":"string","enum":["light","balanced","expressive"],"description":"light = a few key moments; balanced = natural; expressive = a performance"},"locale":{"description":"Language and dialect of the script, e.g. ar-EG","type":"string","maxLength":20}},"required":["text"],"additionalProperties":false},"example":{"text":"مرحباً بك في فوكلا.","voiceId":"01990000-0000-7000-8000-000000000001","intensity":"balanced","locale":"ar-SA"}}}},"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"text":{"type":"string","description":"The script with tags in place; its words are exactly the ones sent"},"vendor":{"type":"string","enum":["gemini","drama"],"description":"gemini = catalogue voices (Gemini 3.8 TTS); drama = cloned voices (Fish Audio Drama 3)"},"intensity":{"type":"string","enum":["light","balanced","expressive"],"description":"light = a few key moments; balanced = natural; expressive = a performance"},"added":{"type":"object","properties":{"directions":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"sounds":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"spans":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"pauses":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}},"required":["directions","sounds","spans","pauses"]},"creditsCharged":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"0 when nothing was added or the same script was tagged in the last 24 hours"},"cached":{"type":"boolean"}},"required":["text","vendor","intensity","added","creditsCharged","cached"]},"example":{"text":"مرحباً بك في فوكلا.","vendor":"gemini","intensity":"light","added":{"directions":-9007199254740991,"sounds":-9007199254740991,"spans":-9007199254740991,"pauses":-9007199254740991},"creditsCharged":-9007199254740991,"cached":true}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/text/auto-tags","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/text/auto-tags","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/text/auto-tags","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/text/auto-tags","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/text/auto-tags","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/text/auto-tags","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/text/auto-tags","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/text/auto-tags","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/text/auto-tags","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/text/auto-tags","traceId":"request-id"}}}}}}},"/v1/text/neo-dialect":{"post":{"operationId":"neoDialectText","tags":["Text to speech"],"summary":"Neo dialect correction: rewrites a script natively in the dialect of the voice that reads it (the Admin voice sample \"Adapt text\" call). mode=correct is paid plans only (403 errors[0].path=neoDialect); mode=suggest (free plans, at Generate) never fails and answers `skipped` instead. No credits","description":"Requires workspace role editor or above. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"X-CSRF-Token","in":"header","required":false,"description":"Required for cookie-authenticated mutations; returned by sign-in/sign-up.","schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"text":{"type":"string","minLength":1,"maxLength":10000},"dialect":{"type":"string","minLength":2,"maxLength":20,"description":"Speech dialect the text will be read in (ar-EG…)"},"mode":{"default":"correct","type":"string","enum":["correct","suggest"]},"voiceId":{"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)$"},"uiLocale":{"description":"Language of Neo's one-line note","type":"string","enum":["ar","en"]},"source":{"description":"The box asking (tts, dashboard, dialogue), for analytics","type":"string","maxLength":40}},"required":["text","dialect"]},"example":{"text":"مرحباً بك في فوكلا.","dialect":"ar-SA","mode":"correct","voiceId":"01990000-0000-7000-8000-000000000001","uiLocale":"ar","source":"example"}}}},"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"mode":{"type":"string","enum":["correct","suggest"]},"dialect":{"type":"string"},"sourceText":{"type":"string"},"text":{"type":"string","description":"Neo's text (the original when skipped)"},"changed":{"type":"boolean","description":"Neo's text differs from the original by more than the nearly-identical rule"},"similarity":{"type":"number","minimum":0,"maximum":1},"notes":{"type":"string"},"cached":{"type":"boolean"},"skipped":{"anyOf":[{"type":"string","enum":["identical","daily-cap","disabled","unsupported","too-long","busy","failed"]},{"type":"null"}],"description":"Suggest mode only: why there is no suggestion (the client generates with the original)"},"previewAvailable":{"description":"Suggest mode: the free one-time preview is still unused","type":"boolean"},"suggestionId":{"description":"Correlation id of this answer for the analytics events that follow it (POST /v1/text/neo-dialect/events)","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)$"}},"required":["mode","dialect","sourceText","text","changed","similarity","cached","skipped"]},"example":{"mode":"correct","dialect":"ar-SA","sourceText":"example","text":"مرحباً بك في فوكلا.","changed":true,"similarity":0,"notes":"example","cached":true,"skipped":"identical","previewAvailable":true,"suggestionId":"01990000-0000-7000-8000-000000000001"}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/text/neo-dialect","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/text/neo-dialect","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/text/neo-dialect","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/text/neo-dialect","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/text/neo-dialect","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/text/neo-dialect","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/text/neo-dialect","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/text/neo-dialect","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/text/neo-dialect","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/text/neo-dialect","traceId":"request-id"}}}}}}},"/v1/text/neo-dialect/preview":{"post":{"operationId":"claimNeoDialectPreview","tags":["Text to speech"],"summary":"Claims the free one-time Neo dialect preview for this account (granted once)","description":"Requires workspace role editor or above. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"X-CSRF-Token","in":"header","required":false,"description":"Required for cookie-authenticated mutations; returned by sign-in/sign-up.","schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","default":{},"type":"object","properties":{"source":{"type":"string","maxLength":40},"suggestionId":{"description":"The suggestion the preview applies (analytics)","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)$"},"dialect":{"type":"string","minLength":2,"maxLength":20}}},"example":{}}}},"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"granted":{"type":"boolean"}},"required":["granted"]},"example":{"granted":true}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/text/neo-dialect/preview","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/text/neo-dialect/preview","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/text/neo-dialect/preview","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/text/neo-dialect/preview","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/text/neo-dialect/preview","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/text/neo-dialect/preview","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/text/neo-dialect/preview","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/text/neo-dialect/preview","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/text/neo-dialect/preview","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/text/neo-dialect/preview","traceId":"request-id"}}}}}}},"/v1/text/neo-dialect/events":{"post":{"operationId":"recordNeoDialectEvent","tags":["Text to speech"],"summary":"Analytics: records a step of the Neo dialect flow (Replace / Keep, upgrade opened / cancelled, preview generated, correction accepted / kept / undone) for the signed-in person, with their plan at the time. Never fails the flow: `recorded:false` when it could not be stored","description":"Requires workspace role editor or above. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"X-CSRF-Token","in":"header","required":false,"description":"Required for cookie-authenticated mutations; returned by sign-in/sign-up.","schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"event":{"type":"string","enum":["replace_clicked","keep_clicked","dismissed","upgrade_opened","upgrade_checkout_started","upgrade_cancelled","preview_generated","correct_accepted","correct_kept","correct_retry","correct_undo"]},"suggestionId":{"description":"From the neo-dialect answer this step follows","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)$"},"dialect":{"type":"string","minLength":2,"maxLength":20},"source":{"description":"The box: tts, dashboard, dialogue","type":"string","maxLength":40},"data":{"type":"object","propertyNames":{"type":"string","maxLength":40},"additionalProperties":{"anyOf":[{"type":"string","maxLength":80},{"type":"number"},{"type":"boolean"},{"type":"null"}]}}},"required":["event"]},"example":{"event":"replace_clicked","suggestionId":"01990000-0000-7000-8000-000000000001","dialect":"ar-SA","source":"example","data":{}}}}},"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"recorded":{"type":"boolean"}},"required":["recorded"]},"example":{"recorded":true}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/text/neo-dialect/events","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/text/neo-dialect/events","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/text/neo-dialect/events","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/text/neo-dialect/events","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/text/neo-dialect/events","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/text/neo-dialect/events","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/text/neo-dialect/events","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/text/neo-dialect/events","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/text/neo-dialect/events","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/text/neo-dialect/events","traceId":"request-id"}}}}}}},"/v1/text/neo-intent":{"post":{"operationId":"neoIntentCheck","tags":["Text to speech"],"summary":"Neo smart intent check (docs/NEO_INTENT_CHECK.md): before a TTS box generates, says whether the text is something to read aloud (decision proceed) or a request another tool does better (decision suggest, with the tool route and a prefill). Never fails: problems answer proceed with `skipped`. No credits","description":"Requires workspace role editor or above. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"X-CSRF-Token","in":"header","required":false,"description":"Required for cookie-authenticated mutations; returned by sign-in/sign-up.","schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"text":{"type":"string","minLength":1,"maxLength":10000},"source":{"type":"string","enum":["tts","dashboard"],"description":"The box asking: the Text to speech page (tts) or the dashboard (dashboard)"},"uiLocale":{"description":"Language of Neo's one-line reason","type":"string","minLength":2,"maxLength":10},"prefetch":{"description":"Asked while typing: answered and cached, not recorded (the Generate check is)","type":"boolean"}},"required":["text","source"]},"example":{"text":"مرحباً بك في فوكلا.","source":"tts","uiLocale":"example","prefetch":true}}}},"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"checkId":{"anyOf":[{"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)$"},{"type":"null"}],"description":"The recorded check (null for prefetch and skipped-before-Neo answers); send it back with the person's choice"},"decision":{"type":"string","enum":["proceed","suggest"],"description":"proceed: generate now; suggest: offer `intent`'s tool first"},"intent":{"type":"string","enum":["tts","dialog","cartoon_video","birthday_video","video","image","music","voice_design","voice_clone","voice_change","dubbing","transcription","captions","video_edit"]},"confidence":{"type":"number","minimum":0,"maximum":1},"reason":{"type":"string","description":"Neo's one short, friendly line, in uiLocale"},"route":{"description":"The suggested tool's app route (no locale)","type":["string","null"]},"prefill":{"description":"What to put in that tool's prompt box (the person's idea, cleaned); null for file tools","type":["string","null"]},"skipped":{"anyOf":[{"type":"string","enum":["disabled","not-request","too-long","daily-cap","timeout","failed"]},{"type":"null"}]},"cached":{"type":"boolean"}},"required":["checkId","decision","intent","confidence","reason","route","prefill","skipped","cached"]},"example":{"checkId":"01990000-0000-7000-8000-000000000001","decision":"proceed","intent":"tts","confidence":0,"reason":"example","route":"example","prefill":"example","skipped":"disabled","cached":true}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/text/neo-intent","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/text/neo-intent","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/text/neo-intent","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/text/neo-intent","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/text/neo-intent","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/text/neo-intent","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/text/neo-intent","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/text/neo-intent","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/text/neo-intent","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/text/neo-intent","traceId":"request-id"}}}}}}},"/v1/text/neo-intent/action":{"post":{"operationId":"neoIntentAction","tags":["Text to speech"],"summary":"Records what the person chose after a Neo intent suggestion: redirected to the tool, continued with the voice, or closed it (abandoned). Never fails the flow","description":"Requires workspace role editor or above. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"X-CSRF-Token","in":"header","required":false,"description":"Required for cookie-authenticated mutations; returned by sign-in/sign-up.","schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"checkId":{"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)$"},"action":{"type":"string","enum":["redirected","continued","abandoned"]}},"required":["checkId","action"]},"example":{"checkId":"01990000-0000-7000-8000-000000000001","action":"redirected"}}}},"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"recorded":{"type":"boolean"}},"required":["recorded"]},"example":{"recorded":true}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/text/neo-intent/action","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/text/neo-intent/action","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/text/neo-intent/action","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/text/neo-intent/action","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/text/neo-intent/action","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/text/neo-intent/action","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/text/neo-intent/action","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/text/neo-intent/action","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/text/neo-intent/action","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/text/neo-intent/action","traceId":"request-id"}}}}}}},"/v1/tts/preview":{"post":{"operationId":"previewSpeech","tags":["Pronunciation"],"summary":"Short synchronous preview (a word or a line) for the pronunciation tools; rate limited, no credits","description":"Requires workspace role editor or above. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"X-CSRF-Token","in":"header","required":false,"description":"Required for cookie-authenticated mutations; returned by sign-in/sign-up.","schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"text":{"type":"string","minLength":1,"maxLength":300},"voiceId":{"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)$"},"productModelId":{"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)$"},"applyDictionary":{"default":true,"type":"boolean"}},"required":["text","voiceId"]},"example":{"text":"مرحباً بك في فوكلا.","voiceId":"01990000-0000-7000-8000-000000000001","productModelId":"01990000-0000-7000-8000-000000000001","applyDictionary":true}}}},"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"audioUrl":{"type":"string"},"durationMs":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"peaks":{"maxItems":128,"type":"array","items":{"type":"number"}}},"required":["audioUrl","durationMs","peaks"]},"example":{"audioUrl":"http://localhost:4000/example","durationMs":-9007199254740991,"peaks":[1]}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/tts/preview","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/tts/preview","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/tts/preview","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/tts/preview","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/tts/preview","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/tts/preview","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/tts/preview","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/tts/preview","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/tts/preview","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/tts/preview","traceId":"request-id"}}}}}}},"/v1/brand-kit":{"get":{"operationId":"getBrandKit","tags":["Brand voice"],"summary":"The workspace brand kit (profile, approved voices, approval rule, exclusive voice requests) and whether the plan includes brand voice","description":"Requires workspace role viewer or above. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false}],"security":[{"session":[]},{"apiKey":[]}],"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"included":{"type":"boolean","description":"The workspace plan includes brand voice (entitlements.brandVoice)"},"canManage":{"type":"boolean","description":"The caller may change the kit (workspace admins and the owner)"},"profile":{"type":"object","properties":{"nameAr":{"type":"string","maxLength":100,"description":"Brand name in Arabic script"},"nameLatin":{"type":"string","maxLength":100,"description":"Brand name in Latin script"},"tone":{"type":"string","maxLength":1000,"description":"How the brand sounds: warm, confident, playful…"},"dialects":{"maxItems":6,"type":"array","items":{"type":"string","pattern":"^[a-z]{2,3}(-[A-Z]{2})?$"},"description":"Preferred dialects (ar-SA, ar-EG…), first = main"},"onlyBrandVoices":{"type":"boolean","description":"Editors and viewers may only generate speech and dialogue with the approved brand voices (owners and admins are not limited)"}},"required":["nameAr","nameLatin","tone","dialects","onlyBrandVoices"]},"brandVoiceIds":{"type":"array","items":{"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":"= settings.brandVoiceIds"},"requireApproval":{"type":"boolean","description":"= settings.requireApproval"},"logoUrl":{"description":"The workspace logo (Settings → Workspace)","type":["string","null"]},"maxVoices":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"updatedAt":{"type":["string","null"]},"requests":{"type":"array","items":{"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)$"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"},"status":{"type":"string","description":"Support ticket status: open, in-progress, resolved, closed"},"mode":{"type":"string","enum":["design","clone"]},"gender":{"type":"string"},"age":{"type":"string"},"dialect":{"type":"string"},"useCases":{"type":"array","items":{"type":"string"}},"character":{"type":"string"},"staffReplied":{"type":"boolean","description":"Our team has answered in the support thread"}},"required":["id","createdAt","updatedAt","status","mode","gender","age","dialect","useCases","character","staffReplied"]},"description":"Exclusive voice requests from this workspace, newest first"}},"required":["included","canManage","profile","brandVoiceIds","requireApproval","logoUrl","maxVoices","updatedAt","requests"]},"example":{"included":true,"canManage":true,"profile":{"nameAr":"example","nameLatin":"example","tone":"example","dialects":["example"],"onlyBrandVoices":true},"brandVoiceIds":["01990000-0000-7000-8000-000000000001"],"requireApproval":true,"logoUrl":"http://localhost:4000/example","maxVoices":-9007199254740991,"updatedAt":"2026-09-19T12:00:00.000Z","requests":[{"id":"01990000-0000-7000-8000-000000000001","createdAt":"2026-09-19T12:00:00.000Z","updatedAt":"2026-09-19T12:00:00.000Z","status":"example","mode":"design","gender":"example","age":"example","dialect":"ar-SA","useCases":["example"],"character":"example","staffReplied":true}]}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/brand-kit","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/brand-kit","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/brand-kit","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/brand-kit","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/brand-kit","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/brand-kit","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/brand-kit","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/brand-kit","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/brand-kit","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/brand-kit","traceId":"request-id"}}}}}},"patch":{"operationId":"updateBrandKit","tags":["Brand voice"],"summary":"Change the brand profile or the \"only brand voices\" rule; 403 brandVoice/plan without the plan","description":"Requires workspace role admin or above. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"X-CSRF-Token","in":"header","required":false,"description":"Required for cookie-authenticated mutations; returned by sign-in/sign-up.","schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"nameAr":{"type":"string","maxLength":100,"description":"Brand name in Arabic script"},"nameLatin":{"type":"string","maxLength":100,"description":"Brand name in Latin script"},"tone":{"type":"string","maxLength":1000,"description":"How the brand sounds: warm, confident, playful…"},"dialects":{"maxItems":6,"type":"array","items":{"type":"string","pattern":"^[a-z]{2,3}(-[A-Z]{2})?$"},"description":"Preferred dialects (ar-SA, ar-EG…), first = main"},"onlyBrandVoices":{"type":"boolean","description":"Editors and viewers may only generate speech and dialogue with the approved brand voices (owners and admins are not limited)"}}},"example":{"nameAr":"example","nameLatin":"example","tone":"example","dialects":["example"],"onlyBrandVoices":true}}}},"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"included":{"type":"boolean","description":"The workspace plan includes brand voice (entitlements.brandVoice)"},"canManage":{"type":"boolean","description":"The caller may change the kit (workspace admins and the owner)"},"profile":{"type":"object","properties":{"nameAr":{"type":"string","maxLength":100,"description":"Brand name in Arabic script"},"nameLatin":{"type":"string","maxLength":100,"description":"Brand name in Latin script"},"tone":{"type":"string","maxLength":1000,"description":"How the brand sounds: warm, confident, playful…"},"dialects":{"maxItems":6,"type":"array","items":{"type":"string","pattern":"^[a-z]{2,3}(-[A-Z]{2})?$"},"description":"Preferred dialects (ar-SA, ar-EG…), first = main"},"onlyBrandVoices":{"type":"boolean","description":"Editors and viewers may only generate speech and dialogue with the approved brand voices (owners and admins are not limited)"}},"required":["nameAr","nameLatin","tone","dialects","onlyBrandVoices"]},"brandVoiceIds":{"type":"array","items":{"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":"= settings.brandVoiceIds"},"requireApproval":{"type":"boolean","description":"= settings.requireApproval"},"logoUrl":{"description":"The workspace logo (Settings → Workspace)","type":["string","null"]},"maxVoices":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"updatedAt":{"type":["string","null"]},"requests":{"type":"array","items":{"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)$"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"},"status":{"type":"string","description":"Support ticket status: open, in-progress, resolved, closed"},"mode":{"type":"string","enum":["design","clone"]},"gender":{"type":"string"},"age":{"type":"string"},"dialect":{"type":"string"},"useCases":{"type":"array","items":{"type":"string"}},"character":{"type":"string"},"staffReplied":{"type":"boolean","description":"Our team has answered in the support thread"}},"required":["id","createdAt","updatedAt","status","mode","gender","age","dialect","useCases","character","staffReplied"]},"description":"Exclusive voice requests from this workspace, newest first"}},"required":["included","canManage","profile","brandVoiceIds","requireApproval","logoUrl","maxVoices","updatedAt","requests"]},"example":{"included":true,"canManage":true,"profile":{"nameAr":"example","nameLatin":"example","tone":"example","dialects":["example"],"onlyBrandVoices":true},"brandVoiceIds":["01990000-0000-7000-8000-000000000001"],"requireApproval":true,"logoUrl":"http://localhost:4000/example","maxVoices":-9007199254740991,"updatedAt":"2026-09-19T12:00:00.000Z","requests":[{"id":"01990000-0000-7000-8000-000000000001","createdAt":"2026-09-19T12:00:00.000Z","updatedAt":"2026-09-19T12:00:00.000Z","status":"example","mode":"design","gender":"example","age":"example","dialect":"ar-SA","useCases":["example"],"character":"example","staffReplied":true}]}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/brand-kit","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/brand-kit","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/brand-kit","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/brand-kit","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/brand-kit","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/brand-kit","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/brand-kit","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/brand-kit","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/brand-kit","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/brand-kit","traceId":"request-id"}}}}}}},"/v1/brand-kit/voice-requests":{"post":{"operationId":"createBrandVoiceRequest","tags":["Brand voice"],"summary":"Ask our team for an exclusive brand voice (designed or cloned); stored as a support ticket (topic brandVoice). 403 brandVoice/plan without the plan; at most 3 open requests","description":"Requires workspace role admin or above. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"X-CSRF-Token","in":"header","required":false,"description":"Required for cookie-authenticated mutations; returned by sign-in/sign-up.","schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"mode":{"type":"string","enum":["design","clone"],"description":"design = made from a description; clone = from the brand's own voice talent"},"gender":{"type":"string","enum":["male","female","any"]},"age":{"type":"string","enum":["child","young","adult","mature","senior"]},"dialect":{"type":"string","pattern":"^[a-z]{2,3}(-[A-Z]{2})?$"},"character":{"type":"string","minLength":3,"maxLength":1000,"description":"Personality and delivery: warm, trustworthy, energetic…"},"sampleScript":{"description":"A line the voice will say (optional)","type":"string","maxLength":2000},"useCases":{"description":"Where the voice will be used (optional)","maxItems":7,"type":"array","items":{"type":"string","enum":["ads","ivr","video","elearning","podcast","social","other"]}},"notes":{"type":"string","maxLength":2000},"phone":{"type":"string","pattern":"^\\+\\d{1,4}[ ]?\\d{6,14}$"}},"required":["mode","gender","age","dialect","character","phone"]},"example":{"mode":"design","gender":"male","age":"child","dialect":"ar-SA","character":"example","sampleScript":"example","useCases":["ads"],"notes":"example","phone":"example"}}}},"responses":{"201":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","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)$"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"},"status":{"type":"string","description":"Support ticket status: open, in-progress, resolved, closed"},"mode":{"type":"string","enum":["design","clone"]},"gender":{"type":"string"},"age":{"type":"string"},"dialect":{"type":"string"},"useCases":{"type":"array","items":{"type":"string"}},"character":{"type":"string"},"staffReplied":{"type":"boolean","description":"Our team has answered in the support thread"}},"required":["id","createdAt","updatedAt","status","mode","gender","age","dialect","useCases","character","staffReplied"]},"example":{"id":"01990000-0000-7000-8000-000000000001","createdAt":"2026-09-19T12:00:00.000Z","updatedAt":"2026-09-19T12:00:00.000Z","status":"example","mode":"design","gender":"example","age":"example","dialect":"ar-SA","useCases":["example"],"character":"example","staffReplied":true}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/brand-kit/voice-requests","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/brand-kit/voice-requests","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/brand-kit/voice-requests","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/brand-kit/voice-requests","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/brand-kit/voice-requests","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/brand-kit/voice-requests","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/brand-kit/voice-requests","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/brand-kit/voice-requests","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/brand-kit/voice-requests","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/brand-kit/voice-requests","traceId":"request-id"}}}}}}},"/v1/dubbing/projects":{"get":{"operationId":"listDubProjects","tags":["Dubbing"],"summary":"list Dub Projects","description":"Requires workspace role viewer or above. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"cursor","in":"query","required":false,"schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"schema":{"default":25,"type":"integer","minimum":1,"maximum":100}},{"name":"q","in":"query","required":false,"schema":{"type":"string","maxLength":200}}],"security":[{"session":[]},{"apiKey":[]}],"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"items":{"type":"array","items":{"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)$"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"},"data":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}},"title":{"type":"string"},"status":{"type":"string","enum":["analyzing","translating","cloning","review","rendering","ready","failed"]},"progress":{"type":"number"},"error":{"type":["string","null"]},"isVideo":{"type":"boolean"},"duration":{"type":"number"},"sourceLocale":{"type":"string"},"targetDialect":{"type":"string"},"voiceMode":{"type":"string","enum":["voice","clone-speaker","auto-cast"]},"voiceId":{"anyOf":[{"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)$"},{"type":"null"}]},"background":{"type":"string","enum":["keep","remove"]},"segments":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"start":{"type":"number"},"end":{"type":"number"},"speaker":{"description":"Speaker id (S1, S2…) from speaker detection","type":"string"},"source":{"type":"string"},"target":{"type":"string"},"fit":{"description":"Estimated fit of the dubbed line in its slot","type":"string","enum":["ok","long","short"]},"locked":{"description":"Kept as written by retranslate and batch rewrites","type":"boolean"},"style":{"description":"Delivery for this line, e.g. \"excited\" or \"whisper\"","type":"string","maxLength":200},"speed":{"description":"Pace preference (1 = natural)","type":"number","minimum":0.8,"maximum":1.25},"voiceId":{"description":"Voice for this line only, overriding its speaker","anyOf":[{"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)$"},{"type":"null"}]},"edited":{"description":"Changed since the last render","type":"boolean"}},"required":["id","start","end","source","target"]}},"speakers":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"label":{"type":"string","maxLength":60},"gender":{"type":"string","enum":["male","female","unknown"]},"description":{"type":"string","maxLength":200},"voiceId":{"anyOf":[{"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)$"},{"type":"null"}],"description":"Voice this speaker is dubbed with"},"cloneStatus":{"description":"Set while or after cloning this speaker","type":"string","enum":["processing","ready","failed"]},"lines":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"seconds":{"type":"number"}},"required":["id","label","gender","voiceId","lines","seconds"]}},"glossary":{"type":"array","items":{"type":"object","properties":{"term":{"type":"string","minLength":1,"maxLength":100},"translation":{"anyOf":[{"type":"string","maxLength":200},{"type":"null"}],"description":"Fixed translation; null keeps the term as-is"}},"required":["term","translation"]}},"options":{"type":"object","properties":{"burnSubtitles":{"default":false,"description":"Also export an MP4 with Arabic subtitles burned in","type":"boolean"},"subtitleStyle":{"default":"boxed","type":"string","enum":["clean","boxed","bold"]}}},"sourceUrl":{"type":["string","null"]},"estimateCredits":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"renderedAt":{"type":["string","null"]},"clientId":{"anyOf":[{"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)$"},{"type":"null"}]},"approval":{"description":"Latest review of the current render","anyOf":[{"type":"object","properties":{"status":{"type":"string","enum":["pending","approved","changes_requested","cancelled"]},"reviewId":{"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)$"}},"required":["status","reviewId"]},{"type":"null"}]},"renderGenerationId":{"anyOf":[{"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)$"},{"type":"null"}],"description":"Generation of the latest render (share it, find it in the Library)"},"parentProjectId":{"anyOf":[{"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)$"},{"type":"null"}],"description":"Project this one was duplicated from"},"dirty":{"type":"boolean","description":"Edited since the last render"},"outputs":{"type":"object","properties":{"mp4":{"type":"string"},"mp4Subtitled":{"type":"string"},"mp3":{"type":"string"},"wav":{"type":"string"},"srt":{"type":"string"},"sourceSrt":{"type":"string"},"vtt":{"type":"string"},"sourceVtt":{"type":"string"}},"description":"Inline URLs of the rendered files (playback)"},"downloads":{"description":"The same files as named downloads (Content-Disposition attachment), keyed like `outputs`","type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"string"}}},"required":["id","createdAt","updatedAt","title","status","progress","error","isVideo","duration","sourceLocale","targetDialect","voiceMode","voiceId","background","segments","speakers","glossary","options","sourceUrl","estimateCredits","renderedAt","renderGenerationId","parentProjectId","dirty","outputs"],"additionalProperties":{}}},"nextCursor":{"type":["string","null"]}},"required":["items","nextCursor"]},"example":{"items":[{"id":"01990000-0000-7000-8000-000000000001","createdAt":"2026-09-19T12:00:00.000Z","updatedAt":"2026-09-19T12:00:00.000Z","data":{},"title":"example","status":"analyzing","progress":1,"error":"example","isVideo":true,"duration":1,"sourceLocale":"example","targetDialect":"example","voiceMode":"voice","voiceId":"01990000-0000-7000-8000-000000000001","background":"keep","segments":[{"id":"example","start":1,"end":1,"speaker":"example","source":"example","target":"example","fit":"ok","locked":true,"style":"example","speed":0.8,"voiceId":"01990000-0000-7000-8000-000000000001","edited":true}],"speakers":[{"id":"example","label":"example","gender":"male","description":"example","voiceId":"01990000-0000-7000-8000-000000000001","cloneStatus":"processing","lines":-9007199254740991,"seconds":1}],"glossary":[{"term":"example","translation":"example"}],"options":{"burnSubtitles":false,"subtitleStyle":"boxed"},"sourceUrl":"http://localhost:4000/example","estimateCredits":-9007199254740991,"renderedAt":"2026-09-19T12:00:00.000Z","clientId":"01990000-0000-7000-8000-000000000001","approval":{"status":"pending","reviewId":"01990000-0000-7000-8000-000000000001"},"renderGenerationId":"01990000-0000-7000-8000-000000000001","parentProjectId":"01990000-0000-7000-8000-000000000001","dirty":true,"outputs":{"mp4":"example","mp4Subtitled":"example","mp3":"example","wav":"example","srt":"example","sourceSrt":"example","vtt":"example","sourceVtt":"example"},"downloads":{}}],"nextCursor":"example"}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/dubbing/projects","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/dubbing/projects","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/dubbing/projects","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/dubbing/projects","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/dubbing/projects","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/dubbing/projects","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/dubbing/projects","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/dubbing/projects","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/dubbing/projects","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/dubbing/projects","traceId":"request-id"}}}}}},"post":{"operationId":"createDubProject","tags":["Dubbing"],"summary":"create Dub Project","description":"Requires workspace role editor or above. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"X-CSRF-Token","in":"header","required":false,"description":"Required for cookie-authenticated mutations; returned by sign-in/sign-up.","schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"title":{"type":"string","maxLength":120},"clientId":{"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)$"},"uploadId":{"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)$"},"sourceLocale":{"type":"string","minLength":1,"maxLength":20,"description":"Language spoken in the source, e.g. en-US or ar-SA"},"targetDialect":{"type":"string","minLength":1,"maxLength":20,"description":"Arabic dialect to dub into: ar (Modern Standard Arabic) or ar-SA, ar-AE, ar-KW, ar-QA, ar-BH, ar-OM, ar-YE, ar-IQ, ar-EG, ar-SD, ar-JO, ar-LB, ar-SY, ar-PS, ar-MA, ar-DZ, ar-TN, ar-LY"},"voiceMode":{"type":"string","enum":["voice","clone-speaker","auto-cast"],"description":"voice = one chosen voice for everyone; clone-speaker = clone each speaker (consent required); auto-cast = pick a library voice per detected speaker"},"voiceId":{"description":"Required when voiceMode is voice","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)$"},"speakers":{"default":"auto","description":"Detect several speakers, or treat the video as one","type":"string","enum":["auto","single"]},"background":{"default":"keep","type":"string","enum":["keep","remove"]},"productModelId":{"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)$"},"glossary":{"maxItems":200,"type":"array","items":{"type":"object","properties":{"term":{"type":"string","minLength":1,"maxLength":100},"translation":{"anyOf":[{"type":"string","maxLength":200},{"type":"null"}],"description":"Fixed translation; null keeps the term as-is"}},"required":["term","translation"]}},"consent":{"description":"Required when voiceMode is clone-speaker; covers every speaker in the video","type":"object","properties":{"basis":{"type":"string","enum":["self","permission"],"description":"self = the user’s own voice; permission = someone who gave written permission"},"speakerName":{"description":"Required when basis is permission","type":"string","maxLength":120},"confirmed":{"type":"boolean","const":true},"notPublicFigure":{"type":"boolean","const":true},"policyVersion":{"type":"string","minLength":1,"maxLength":20}},"required":["basis","confirmed","notPublicFigure","policyVersion"]}},"required":["uploadId","sourceLocale","targetDialect","voiceMode"]},"example":{"title":"example","clientId":"01990000-0000-7000-8000-000000000001","uploadId":"01990000-0000-7000-8000-000000000001","sourceLocale":"example","targetDialect":"example","voiceMode":"voice","voiceId":"01990000-0000-7000-8000-000000000001","speakers":"auto","background":"keep","productModelId":"01990000-0000-7000-8000-000000000001","glossary":[{"term":"example","translation":"example"}],"consent":{"basis":"self","speakerName":"example","confirmed":true,"notPublicFigure":true,"policyVersion":"example"}}}}},"responses":{"201":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","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)$"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"},"data":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}},"title":{"type":"string"},"status":{"type":"string","enum":["analyzing","translating","cloning","review","rendering","ready","failed"]},"progress":{"type":"number"},"error":{"type":["string","null"]},"isVideo":{"type":"boolean"},"duration":{"type":"number"},"sourceLocale":{"type":"string"},"targetDialect":{"type":"string"},"voiceMode":{"type":"string","enum":["voice","clone-speaker","auto-cast"]},"voiceId":{"anyOf":[{"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)$"},{"type":"null"}]},"background":{"type":"string","enum":["keep","remove"]},"segments":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"start":{"type":"number"},"end":{"type":"number"},"speaker":{"description":"Speaker id (S1, S2…) from speaker detection","type":"string"},"source":{"type":"string"},"target":{"type":"string"},"fit":{"description":"Estimated fit of the dubbed line in its slot","type":"string","enum":["ok","long","short"]},"locked":{"description":"Kept as written by retranslate and batch rewrites","type":"boolean"},"style":{"description":"Delivery for this line, e.g. \"excited\" or \"whisper\"","type":"string","maxLength":200},"speed":{"description":"Pace preference (1 = natural)","type":"number","minimum":0.8,"maximum":1.25},"voiceId":{"description":"Voice for this line only, overriding its speaker","anyOf":[{"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)$"},{"type":"null"}]},"edited":{"description":"Changed since the last render","type":"boolean"}},"required":["id","start","end","source","target"]}},"speakers":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"label":{"type":"string","maxLength":60},"gender":{"type":"string","enum":["male","female","unknown"]},"description":{"type":"string","maxLength":200},"voiceId":{"anyOf":[{"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)$"},{"type":"null"}],"description":"Voice this speaker is dubbed with"},"cloneStatus":{"description":"Set while or after cloning this speaker","type":"string","enum":["processing","ready","failed"]},"lines":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"seconds":{"type":"number"}},"required":["id","label","gender","voiceId","lines","seconds"]}},"glossary":{"type":"array","items":{"type":"object","properties":{"term":{"type":"string","minLength":1,"maxLength":100},"translation":{"anyOf":[{"type":"string","maxLength":200},{"type":"null"}],"description":"Fixed translation; null keeps the term as-is"}},"required":["term","translation"]}},"options":{"type":"object","properties":{"burnSubtitles":{"default":false,"description":"Also export an MP4 with Arabic subtitles burned in","type":"boolean"},"subtitleStyle":{"default":"boxed","type":"string","enum":["clean","boxed","bold"]}}},"sourceUrl":{"type":["string","null"]},"estimateCredits":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"renderedAt":{"type":["string","null"]},"clientId":{"anyOf":[{"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)$"},{"type":"null"}]},"approval":{"description":"Latest review of the current render","anyOf":[{"type":"object","properties":{"status":{"type":"string","enum":["pending","approved","changes_requested","cancelled"]},"reviewId":{"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)$"}},"required":["status","reviewId"]},{"type":"null"}]},"renderGenerationId":{"anyOf":[{"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)$"},{"type":"null"}],"description":"Generation of the latest render (share it, find it in the Library)"},"parentProjectId":{"anyOf":[{"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)$"},{"type":"null"}],"description":"Project this one was duplicated from"},"dirty":{"type":"boolean","description":"Edited since the last render"},"outputs":{"type":"object","properties":{"mp4":{"type":"string"},"mp4Subtitled":{"type":"string"},"mp3":{"type":"string"},"wav":{"type":"string"},"srt":{"type":"string"},"sourceSrt":{"type":"string"},"vtt":{"type":"string"},"sourceVtt":{"type":"string"}},"description":"Inline URLs of the rendered files (playback)"},"downloads":{"description":"The same files as named downloads (Content-Disposition attachment), keyed like `outputs`","type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"string"}}},"required":["id","createdAt","updatedAt","title","status","progress","error","isVideo","duration","sourceLocale","targetDialect","voiceMode","voiceId","background","segments","speakers","glossary","options","sourceUrl","estimateCredits","renderedAt","renderGenerationId","parentProjectId","dirty","outputs"],"additionalProperties":{}},"example":{"id":"01990000-0000-7000-8000-000000000001","createdAt":"2026-09-19T12:00:00.000Z","updatedAt":"2026-09-19T12:00:00.000Z","data":{},"title":"example","status":"analyzing","progress":1,"error":"example","isVideo":true,"duration":1,"sourceLocale":"example","targetDialect":"example","voiceMode":"voice","voiceId":"01990000-0000-7000-8000-000000000001","background":"keep","segments":[{"id":"example","start":1,"end":1,"speaker":"example","source":"example","target":"example","fit":"ok","locked":true,"style":"example","speed":0.8,"voiceId":"01990000-0000-7000-8000-000000000001","edited":true}],"speakers":[{"id":"example","label":"example","gender":"male","description":"example","voiceId":"01990000-0000-7000-8000-000000000001","cloneStatus":"processing","lines":-9007199254740991,"seconds":1}],"glossary":[{"term":"example","translation":"example"}],"options":{"burnSubtitles":false,"subtitleStyle":"boxed"},"sourceUrl":"http://localhost:4000/example","estimateCredits":-9007199254740991,"renderedAt":"2026-09-19T12:00:00.000Z","clientId":"01990000-0000-7000-8000-000000000001","approval":{"status":"pending","reviewId":"01990000-0000-7000-8000-000000000001"},"renderGenerationId":"01990000-0000-7000-8000-000000000001","parentProjectId":"01990000-0000-7000-8000-000000000001","dirty":true,"outputs":{"mp4":"example","mp4Subtitled":"example","mp3":"example","wav":"example","srt":"example","sourceSrt":"example","vtt":"example","sourceVtt":"example"},"downloads":{}}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/dubbing/projects","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/dubbing/projects","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/dubbing/projects","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/dubbing/projects","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/dubbing/projects","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/dubbing/projects","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/dubbing/projects","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/dubbing/projects","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/dubbing/projects","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/dubbing/projects","traceId":"request-id"}}}}}}},"/v1/dubbing/projects/{id}":{"get":{"operationId":"getDubProject","tags":["Dubbing"],"summary":"get Dub Project","description":"Requires workspace role viewer or above. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","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)$"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"},"data":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}},"title":{"type":"string"},"status":{"type":"string","enum":["analyzing","translating","cloning","review","rendering","ready","failed"]},"progress":{"type":"number"},"error":{"type":["string","null"]},"isVideo":{"type":"boolean"},"duration":{"type":"number"},"sourceLocale":{"type":"string"},"targetDialect":{"type":"string"},"voiceMode":{"type":"string","enum":["voice","clone-speaker","auto-cast"]},"voiceId":{"anyOf":[{"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)$"},{"type":"null"}]},"background":{"type":"string","enum":["keep","remove"]},"segments":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"start":{"type":"number"},"end":{"type":"number"},"speaker":{"description":"Speaker id (S1, S2…) from speaker detection","type":"string"},"source":{"type":"string"},"target":{"type":"string"},"fit":{"description":"Estimated fit of the dubbed line in its slot","type":"string","enum":["ok","long","short"]},"locked":{"description":"Kept as written by retranslate and batch rewrites","type":"boolean"},"style":{"description":"Delivery for this line, e.g. \"excited\" or \"whisper\"","type":"string","maxLength":200},"speed":{"description":"Pace preference (1 = natural)","type":"number","minimum":0.8,"maximum":1.25},"voiceId":{"description":"Voice for this line only, overriding its speaker","anyOf":[{"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)$"},{"type":"null"}]},"edited":{"description":"Changed since the last render","type":"boolean"}},"required":["id","start","end","source","target"]}},"speakers":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"label":{"type":"string","maxLength":60},"gender":{"type":"string","enum":["male","female","unknown"]},"description":{"type":"string","maxLength":200},"voiceId":{"anyOf":[{"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)$"},{"type":"null"}],"description":"Voice this speaker is dubbed with"},"cloneStatus":{"description":"Set while or after cloning this speaker","type":"string","enum":["processing","ready","failed"]},"lines":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"seconds":{"type":"number"}},"required":["id","label","gender","voiceId","lines","seconds"]}},"glossary":{"type":"array","items":{"type":"object","properties":{"term":{"type":"string","minLength":1,"maxLength":100},"translation":{"anyOf":[{"type":"string","maxLength":200},{"type":"null"}],"description":"Fixed translation; null keeps the term as-is"}},"required":["term","translation"]}},"options":{"type":"object","properties":{"burnSubtitles":{"default":false,"description":"Also export an MP4 with Arabic subtitles burned in","type":"boolean"},"subtitleStyle":{"default":"boxed","type":"string","enum":["clean","boxed","bold"]}}},"sourceUrl":{"type":["string","null"]},"estimateCredits":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"renderedAt":{"type":["string","null"]},"clientId":{"anyOf":[{"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)$"},{"type":"null"}]},"approval":{"description":"Latest review of the current render","anyOf":[{"type":"object","properties":{"status":{"type":"string","enum":["pending","approved","changes_requested","cancelled"]},"reviewId":{"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)$"}},"required":["status","reviewId"]},{"type":"null"}]},"renderGenerationId":{"anyOf":[{"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)$"},{"type":"null"}],"description":"Generation of the latest render (share it, find it in the Library)"},"parentProjectId":{"anyOf":[{"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)$"},{"type":"null"}],"description":"Project this one was duplicated from"},"dirty":{"type":"boolean","description":"Edited since the last render"},"outputs":{"type":"object","properties":{"mp4":{"type":"string"},"mp4Subtitled":{"type":"string"},"mp3":{"type":"string"},"wav":{"type":"string"},"srt":{"type":"string"},"sourceSrt":{"type":"string"},"vtt":{"type":"string"},"sourceVtt":{"type":"string"}},"description":"Inline URLs of the rendered files (playback)"},"downloads":{"description":"The same files as named downloads (Content-Disposition attachment), keyed like `outputs`","type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"string"}}},"required":["id","createdAt","updatedAt","title","status","progress","error","isVideo","duration","sourceLocale","targetDialect","voiceMode","voiceId","background","segments","speakers","glossary","options","sourceUrl","estimateCredits","renderedAt","renderGenerationId","parentProjectId","dirty","outputs"],"additionalProperties":{}},"example":{"id":"01990000-0000-7000-8000-000000000001","createdAt":"2026-09-19T12:00:00.000Z","updatedAt":"2026-09-19T12:00:00.000Z","data":{},"title":"example","status":"analyzing","progress":1,"error":"example","isVideo":true,"duration":1,"sourceLocale":"example","targetDialect":"example","voiceMode":"voice","voiceId":"01990000-0000-7000-8000-000000000001","background":"keep","segments":[{"id":"example","start":1,"end":1,"speaker":"example","source":"example","target":"example","fit":"ok","locked":true,"style":"example","speed":0.8,"voiceId":"01990000-0000-7000-8000-000000000001","edited":true}],"speakers":[{"id":"example","label":"example","gender":"male","description":"example","voiceId":"01990000-0000-7000-8000-000000000001","cloneStatus":"processing","lines":-9007199254740991,"seconds":1}],"glossary":[{"term":"example","translation":"example"}],"options":{"burnSubtitles":false,"subtitleStyle":"boxed"},"sourceUrl":"http://localhost:4000/example","estimateCredits":-9007199254740991,"renderedAt":"2026-09-19T12:00:00.000Z","clientId":"01990000-0000-7000-8000-000000000001","approval":{"status":"pending","reviewId":"01990000-0000-7000-8000-000000000001"},"renderGenerationId":"01990000-0000-7000-8000-000000000001","parentProjectId":"01990000-0000-7000-8000-000000000001","dirty":true,"outputs":{"mp4":"example","mp4Subtitled":"example","mp3":"example","wav":"example","srt":"example","sourceSrt":"example","vtt":"example","sourceVtt":"example"},"downloads":{}}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/dubbing/projects/{id}","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/dubbing/projects/{id}","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/dubbing/projects/{id}","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/dubbing/projects/{id}","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/dubbing/projects/{id}","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/dubbing/projects/{id}","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/dubbing/projects/{id}","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/dubbing/projects/{id}","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/dubbing/projects/{id}","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/dubbing/projects/{id}","traceId":"request-id"}}}}}},"patch":{"operationId":"updateDubProject","tags":["Dubbing"],"summary":"update Dub Project","description":"Requires workspace role editor or above. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"X-CSRF-Token","in":"header","required":false,"description":"Required for cookie-authenticated mutations; returned by sign-in/sign-up.","schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"title":{"type":"string","minLength":1,"maxLength":120},"voiceId":{"description":"Voice for every speaker (single-voice projects)","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)$"},"background":{"type":"string","enum":["keep","remove"]},"segments":{"maxItems":2000,"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"target":{"type":"string","maxLength":2000},"start":{"type":"number","minimum":0},"end":{"type":"number","minimum":0},"speaker":{"type":"string","maxLength":20},"style":{"anyOf":[{"type":"string","maxLength":200},{"type":"null"}]},"speed":{"anyOf":[{"type":"number","minimum":0.8,"maximum":1.25},{"type":"null"}]},"voiceId":{"anyOf":[{"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)$"},{"type":"null"}]},"locked":{"type":"boolean"}},"required":["id"]}},"speakers":{"maxItems":20,"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"label":{"type":"string","minLength":1,"maxLength":60},"voiceId":{"anyOf":[{"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)$"},{"type":"null"}]}},"required":["id"]}},"glossary":{"maxItems":200,"type":"array","items":{"type":"object","properties":{"term":{"type":"string","minLength":1,"maxLength":100},"translation":{"anyOf":[{"type":"string","maxLength":200},{"type":"null"}],"description":"Fixed translation; null keeps the term as-is"}},"required":["term","translation"]}},"options":{"type":"object","properties":{"burnSubtitles":{"default":false,"description":"Also export an MP4 with Arabic subtitles burned in","type":"boolean"},"subtitleStyle":{"default":"boxed","type":"string","enum":["clean","boxed","bold"]}}}}},"example":{"title":"example","voiceId":"01990000-0000-7000-8000-000000000001","background":"keep","segments":[{"id":"example","target":"example","start":0,"end":0,"speaker":"example","style":"example","speed":0.8,"voiceId":"01990000-0000-7000-8000-000000000001","locked":true}],"speakers":[{"id":"example","label":"example","voiceId":"01990000-0000-7000-8000-000000000001"}],"glossary":[{"term":"example","translation":"example"}],"options":{"burnSubtitles":false,"subtitleStyle":"boxed"}}}}},"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","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)$"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"},"data":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}},"title":{"type":"string"},"status":{"type":"string","enum":["analyzing","translating","cloning","review","rendering","ready","failed"]},"progress":{"type":"number"},"error":{"type":["string","null"]},"isVideo":{"type":"boolean"},"duration":{"type":"number"},"sourceLocale":{"type":"string"},"targetDialect":{"type":"string"},"voiceMode":{"type":"string","enum":["voice","clone-speaker","auto-cast"]},"voiceId":{"anyOf":[{"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)$"},{"type":"null"}]},"background":{"type":"string","enum":["keep","remove"]},"segments":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"start":{"type":"number"},"end":{"type":"number"},"speaker":{"description":"Speaker id (S1, S2…) from speaker detection","type":"string"},"source":{"type":"string"},"target":{"type":"string"},"fit":{"description":"Estimated fit of the dubbed line in its slot","type":"string","enum":["ok","long","short"]},"locked":{"description":"Kept as written by retranslate and batch rewrites","type":"boolean"},"style":{"description":"Delivery for this line, e.g. \"excited\" or \"whisper\"","type":"string","maxLength":200},"speed":{"description":"Pace preference (1 = natural)","type":"number","minimum":0.8,"maximum":1.25},"voiceId":{"description":"Voice for this line only, overriding its speaker","anyOf":[{"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)$"},{"type":"null"}]},"edited":{"description":"Changed since the last render","type":"boolean"}},"required":["id","start","end","source","target"]}},"speakers":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"label":{"type":"string","maxLength":60},"gender":{"type":"string","enum":["male","female","unknown"]},"description":{"type":"string","maxLength":200},"voiceId":{"anyOf":[{"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)$"},{"type":"null"}],"description":"Voice this speaker is dubbed with"},"cloneStatus":{"description":"Set while or after cloning this speaker","type":"string","enum":["processing","ready","failed"]},"lines":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"seconds":{"type":"number"}},"required":["id","label","gender","voiceId","lines","seconds"]}},"glossary":{"type":"array","items":{"type":"object","properties":{"term":{"type":"string","minLength":1,"maxLength":100},"translation":{"anyOf":[{"type":"string","maxLength":200},{"type":"null"}],"description":"Fixed translation; null keeps the term as-is"}},"required":["term","translation"]}},"options":{"type":"object","properties":{"burnSubtitles":{"default":false,"description":"Also export an MP4 with Arabic subtitles burned in","type":"boolean"},"subtitleStyle":{"default":"boxed","type":"string","enum":["clean","boxed","bold"]}}},"sourceUrl":{"type":["string","null"]},"estimateCredits":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"renderedAt":{"type":["string","null"]},"clientId":{"anyOf":[{"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)$"},{"type":"null"}]},"approval":{"description":"Latest review of the current render","anyOf":[{"type":"object","properties":{"status":{"type":"string","enum":["pending","approved","changes_requested","cancelled"]},"reviewId":{"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)$"}},"required":["status","reviewId"]},{"type":"null"}]},"renderGenerationId":{"anyOf":[{"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)$"},{"type":"null"}],"description":"Generation of the latest render (share it, find it in the Library)"},"parentProjectId":{"anyOf":[{"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)$"},{"type":"null"}],"description":"Project this one was duplicated from"},"dirty":{"type":"boolean","description":"Edited since the last render"},"outputs":{"type":"object","properties":{"mp4":{"type":"string"},"mp4Subtitled":{"type":"string"},"mp3":{"type":"string"},"wav":{"type":"string"},"srt":{"type":"string"},"sourceSrt":{"type":"string"},"vtt":{"type":"string"},"sourceVtt":{"type":"string"}},"description":"Inline URLs of the rendered files (playback)"},"downloads":{"description":"The same files as named downloads (Content-Disposition attachment), keyed like `outputs`","type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"string"}}},"required":["id","createdAt","updatedAt","title","status","progress","error","isVideo","duration","sourceLocale","targetDialect","voiceMode","voiceId","background","segments","speakers","glossary","options","sourceUrl","estimateCredits","renderedAt","renderGenerationId","parentProjectId","dirty","outputs"],"additionalProperties":{}},"example":{"id":"01990000-0000-7000-8000-000000000001","createdAt":"2026-09-19T12:00:00.000Z","updatedAt":"2026-09-19T12:00:00.000Z","data":{},"title":"example","status":"analyzing","progress":1,"error":"example","isVideo":true,"duration":1,"sourceLocale":"example","targetDialect":"example","voiceMode":"voice","voiceId":"01990000-0000-7000-8000-000000000001","background":"keep","segments":[{"id":"example","start":1,"end":1,"speaker":"example","source":"example","target":"example","fit":"ok","locked":true,"style":"example","speed":0.8,"voiceId":"01990000-0000-7000-8000-000000000001","edited":true}],"speakers":[{"id":"example","label":"example","gender":"male","description":"example","voiceId":"01990000-0000-7000-8000-000000000001","cloneStatus":"processing","lines":-9007199254740991,"seconds":1}],"glossary":[{"term":"example","translation":"example"}],"options":{"burnSubtitles":false,"subtitleStyle":"boxed"},"sourceUrl":"http://localhost:4000/example","estimateCredits":-9007199254740991,"renderedAt":"2026-09-19T12:00:00.000Z","clientId":"01990000-0000-7000-8000-000000000001","approval":{"status":"pending","reviewId":"01990000-0000-7000-8000-000000000001"},"renderGenerationId":"01990000-0000-7000-8000-000000000001","parentProjectId":"01990000-0000-7000-8000-000000000001","dirty":true,"outputs":{"mp4":"example","mp4Subtitled":"example","mp3":"example","wav":"example","srt":"example","sourceSrt":"example","vtt":"example","sourceVtt":"example"},"downloads":{}}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/dubbing/projects/{id}","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/dubbing/projects/{id}","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/dubbing/projects/{id}","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/dubbing/projects/{id}","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/dubbing/projects/{id}","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/dubbing/projects/{id}","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/dubbing/projects/{id}","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/dubbing/projects/{id}","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/dubbing/projects/{id}","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/dubbing/projects/{id}","traceId":"request-id"}}}}}},"delete":{"operationId":"deleteDubProject","tags":["Dubbing"],"summary":"delete Dub Project","description":"Requires workspace role editor or above. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"X-CSRF-Token","in":"header","required":false,"description":"Required for cookie-authenticated mutations; returned by sign-in/sign-up.","schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"ok":{"type":"boolean"}},"required":["ok"]},"example":{"ok":true}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/dubbing/projects/{id}","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/dubbing/projects/{id}","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/dubbing/projects/{id}","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/dubbing/projects/{id}","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/dubbing/projects/{id}","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/dubbing/projects/{id}","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/dubbing/projects/{id}","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/dubbing/projects/{id}","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/dubbing/projects/{id}","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/dubbing/projects/{id}","traceId":"request-id"}}}}}}},"/v1/dubbing/projects/{id}/retranslate":{"post":{"operationId":"retranslateDubProject","tags":["Dubbing"],"summary":"retranslate Dub Project","description":"Requires workspace role editor or above. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"X-CSRF-Token","in":"header","required":false,"description":"Required for cookie-authenticated mutations; returned by sign-in/sign-up.","schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"segmentIds":{"maxItems":2000,"type":"array","items":{"type":"string"}}}},"example":{"segmentIds":["example"]}}}},"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","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)$"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"},"data":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}},"title":{"type":"string"},"status":{"type":"string","enum":["analyzing","translating","cloning","review","rendering","ready","failed"]},"progress":{"type":"number"},"error":{"type":["string","null"]},"isVideo":{"type":"boolean"},"duration":{"type":"number"},"sourceLocale":{"type":"string"},"targetDialect":{"type":"string"},"voiceMode":{"type":"string","enum":["voice","clone-speaker","auto-cast"]},"voiceId":{"anyOf":[{"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)$"},{"type":"null"}]},"background":{"type":"string","enum":["keep","remove"]},"segments":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"start":{"type":"number"},"end":{"type":"number"},"speaker":{"description":"Speaker id (S1, S2…) from speaker detection","type":"string"},"source":{"type":"string"},"target":{"type":"string"},"fit":{"description":"Estimated fit of the dubbed line in its slot","type":"string","enum":["ok","long","short"]},"locked":{"description":"Kept as written by retranslate and batch rewrites","type":"boolean"},"style":{"description":"Delivery for this line, e.g. \"excited\" or \"whisper\"","type":"string","maxLength":200},"speed":{"description":"Pace preference (1 = natural)","type":"number","minimum":0.8,"maximum":1.25},"voiceId":{"description":"Voice for this line only, overriding its speaker","anyOf":[{"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)$"},{"type":"null"}]},"edited":{"description":"Changed since the last render","type":"boolean"}},"required":["id","start","end","source","target"]}},"speakers":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"label":{"type":"string","maxLength":60},"gender":{"type":"string","enum":["male","female","unknown"]},"description":{"type":"string","maxLength":200},"voiceId":{"anyOf":[{"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)$"},{"type":"null"}],"description":"Voice this speaker is dubbed with"},"cloneStatus":{"description":"Set while or after cloning this speaker","type":"string","enum":["processing","ready","failed"]},"lines":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"seconds":{"type":"number"}},"required":["id","label","gender","voiceId","lines","seconds"]}},"glossary":{"type":"array","items":{"type":"object","properties":{"term":{"type":"string","minLength":1,"maxLength":100},"translation":{"anyOf":[{"type":"string","maxLength":200},{"type":"null"}],"description":"Fixed translation; null keeps the term as-is"}},"required":["term","translation"]}},"options":{"type":"object","properties":{"burnSubtitles":{"default":false,"description":"Also export an MP4 with Arabic subtitles burned in","type":"boolean"},"subtitleStyle":{"default":"boxed","type":"string","enum":["clean","boxed","bold"]}}},"sourceUrl":{"type":["string","null"]},"estimateCredits":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"renderedAt":{"type":["string","null"]},"clientId":{"anyOf":[{"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)$"},{"type":"null"}]},"approval":{"description":"Latest review of the current render","anyOf":[{"type":"object","properties":{"status":{"type":"string","enum":["pending","approved","changes_requested","cancelled"]},"reviewId":{"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)$"}},"required":["status","reviewId"]},{"type":"null"}]},"renderGenerationId":{"anyOf":[{"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)$"},{"type":"null"}],"description":"Generation of the latest render (share it, find it in the Library)"},"parentProjectId":{"anyOf":[{"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)$"},{"type":"null"}],"description":"Project this one was duplicated from"},"dirty":{"type":"boolean","description":"Edited since the last render"},"outputs":{"type":"object","properties":{"mp4":{"type":"string"},"mp4Subtitled":{"type":"string"},"mp3":{"type":"string"},"wav":{"type":"string"},"srt":{"type":"string"},"sourceSrt":{"type":"string"},"vtt":{"type":"string"},"sourceVtt":{"type":"string"}},"description":"Inline URLs of the rendered files (playback)"},"downloads":{"description":"The same files as named downloads (Content-Disposition attachment), keyed like `outputs`","type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"string"}}},"required":["id","createdAt","updatedAt","title","status","progress","error","isVideo","duration","sourceLocale","targetDialect","voiceMode","voiceId","background","segments","speakers","glossary","options","sourceUrl","estimateCredits","renderedAt","renderGenerationId","parentProjectId","dirty","outputs"],"additionalProperties":{}},"example":{"id":"01990000-0000-7000-8000-000000000001","createdAt":"2026-09-19T12:00:00.000Z","updatedAt":"2026-09-19T12:00:00.000Z","data":{},"title":"example","status":"analyzing","progress":1,"error":"example","isVideo":true,"duration":1,"sourceLocale":"example","targetDialect":"example","voiceMode":"voice","voiceId":"01990000-0000-7000-8000-000000000001","background":"keep","segments":[{"id":"example","start":1,"end":1,"speaker":"example","source":"example","target":"example","fit":"ok","locked":true,"style":"example","speed":0.8,"voiceId":"01990000-0000-7000-8000-000000000001","edited":true}],"speakers":[{"id":"example","label":"example","gender":"male","description":"example","voiceId":"01990000-0000-7000-8000-000000000001","cloneStatus":"processing","lines":-9007199254740991,"seconds":1}],"glossary":[{"term":"example","translation":"example"}],"options":{"burnSubtitles":false,"subtitleStyle":"boxed"},"sourceUrl":"http://localhost:4000/example","estimateCredits":-9007199254740991,"renderedAt":"2026-09-19T12:00:00.000Z","clientId":"01990000-0000-7000-8000-000000000001","approval":{"status":"pending","reviewId":"01990000-0000-7000-8000-000000000001"},"renderGenerationId":"01990000-0000-7000-8000-000000000001","parentProjectId":"01990000-0000-7000-8000-000000000001","dirty":true,"outputs":{"mp4":"example","mp4Subtitled":"example","mp3":"example","wav":"example","srt":"example","sourceSrt":"example","vtt":"example","sourceVtt":"example"},"downloads":{}}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/dubbing/projects/{id}/retranslate","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/dubbing/projects/{id}/retranslate","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/dubbing/projects/{id}/retranslate","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/dubbing/projects/{id}/retranslate","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/dubbing/projects/{id}/retranslate","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/dubbing/projects/{id}/retranslate","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/dubbing/projects/{id}/retranslate","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/dubbing/projects/{id}/retranslate","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/dubbing/projects/{id}/retranslate","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/dubbing/projects/{id}/retranslate","traceId":"request-id"}}}}}}},"/v1/dubbing/projects/{id}/segments/{segmentId}/preview":{"post":{"operationId":"previewDubSegment","tags":["Dubbing"],"summary":"preview Dub Segment","description":"Requires workspace role editor or above. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"segmentId","in":"path","required":true,"schema":{"type":"string"}},{"name":"X-CSRF-Token","in":"header","required":false,"description":"Required for cookie-authenticated mutations; returned by sign-in/sign-up.","schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"audioUrl":{"type":"string"},"durationMs":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"peaks":{"maxItems":128,"type":"array","items":{"type":"number"}}},"required":["audioUrl","durationMs","peaks"]},"example":{"audioUrl":"http://localhost:4000/example","durationMs":-9007199254740991,"peaks":[1]}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/dubbing/projects/{id}/segments/{segmentId}/preview","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/dubbing/projects/{id}/segments/{segmentId}/preview","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/dubbing/projects/{id}/segments/{segmentId}/preview","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/dubbing/projects/{id}/segments/{segmentId}/preview","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/dubbing/projects/{id}/segments/{segmentId}/preview","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/dubbing/projects/{id}/segments/{segmentId}/preview","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/dubbing/projects/{id}/segments/{segmentId}/preview","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/dubbing/projects/{id}/segments/{segmentId}/preview","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/dubbing/projects/{id}/segments/{segmentId}/preview","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/dubbing/projects/{id}/segments/{segmentId}/preview","traceId":"request-id"}}}}}}},"/v1/dubbing/projects/{id}/retry":{"post":{"operationId":"retryDubProject","tags":["Dubbing"],"summary":"Run the stage that failed again (analysis, translation or voice cloning); a failed render is retried by rendering again","description":"Requires workspace role editor or above. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"X-CSRF-Token","in":"header","required":false,"description":"Required for cookie-authenticated mutations; returned by sign-in/sign-up.","schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","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)$"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"},"data":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}},"title":{"type":"string"},"status":{"type":"string","enum":["analyzing","translating","cloning","review","rendering","ready","failed"]},"progress":{"type":"number"},"error":{"type":["string","null"]},"isVideo":{"type":"boolean"},"duration":{"type":"number"},"sourceLocale":{"type":"string"},"targetDialect":{"type":"string"},"voiceMode":{"type":"string","enum":["voice","clone-speaker","auto-cast"]},"voiceId":{"anyOf":[{"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)$"},{"type":"null"}]},"background":{"type":"string","enum":["keep","remove"]},"segments":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"start":{"type":"number"},"end":{"type":"number"},"speaker":{"description":"Speaker id (S1, S2…) from speaker detection","type":"string"},"source":{"type":"string"},"target":{"type":"string"},"fit":{"description":"Estimated fit of the dubbed line in its slot","type":"string","enum":["ok","long","short"]},"locked":{"description":"Kept as written by retranslate and batch rewrites","type":"boolean"},"style":{"description":"Delivery for this line, e.g. \"excited\" or \"whisper\"","type":"string","maxLength":200},"speed":{"description":"Pace preference (1 = natural)","type":"number","minimum":0.8,"maximum":1.25},"voiceId":{"description":"Voice for this line only, overriding its speaker","anyOf":[{"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)$"},{"type":"null"}]},"edited":{"description":"Changed since the last render","type":"boolean"}},"required":["id","start","end","source","target"]}},"speakers":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"label":{"type":"string","maxLength":60},"gender":{"type":"string","enum":["male","female","unknown"]},"description":{"type":"string","maxLength":200},"voiceId":{"anyOf":[{"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)$"},{"type":"null"}],"description":"Voice this speaker is dubbed with"},"cloneStatus":{"description":"Set while or after cloning this speaker","type":"string","enum":["processing","ready","failed"]},"lines":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"seconds":{"type":"number"}},"required":["id","label","gender","voiceId","lines","seconds"]}},"glossary":{"type":"array","items":{"type":"object","properties":{"term":{"type":"string","minLength":1,"maxLength":100},"translation":{"anyOf":[{"type":"string","maxLength":200},{"type":"null"}],"description":"Fixed translation; null keeps the term as-is"}},"required":["term","translation"]}},"options":{"type":"object","properties":{"burnSubtitles":{"default":false,"description":"Also export an MP4 with Arabic subtitles burned in","type":"boolean"},"subtitleStyle":{"default":"boxed","type":"string","enum":["clean","boxed","bold"]}}},"sourceUrl":{"type":["string","null"]},"estimateCredits":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"renderedAt":{"type":["string","null"]},"clientId":{"anyOf":[{"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)$"},{"type":"null"}]},"approval":{"description":"Latest review of the current render","anyOf":[{"type":"object","properties":{"status":{"type":"string","enum":["pending","approved","changes_requested","cancelled"]},"reviewId":{"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)$"}},"required":["status","reviewId"]},{"type":"null"}]},"renderGenerationId":{"anyOf":[{"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)$"},{"type":"null"}],"description":"Generation of the latest render (share it, find it in the Library)"},"parentProjectId":{"anyOf":[{"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)$"},{"type":"null"}],"description":"Project this one was duplicated from"},"dirty":{"type":"boolean","description":"Edited since the last render"},"outputs":{"type":"object","properties":{"mp4":{"type":"string"},"mp4Subtitled":{"type":"string"},"mp3":{"type":"string"},"wav":{"type":"string"},"srt":{"type":"string"},"sourceSrt":{"type":"string"},"vtt":{"type":"string"},"sourceVtt":{"type":"string"}},"description":"Inline URLs of the rendered files (playback)"},"downloads":{"description":"The same files as named downloads (Content-Disposition attachment), keyed like `outputs`","type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"string"}}},"required":["id","createdAt","updatedAt","title","status","progress","error","isVideo","duration","sourceLocale","targetDialect","voiceMode","voiceId","background","segments","speakers","glossary","options","sourceUrl","estimateCredits","renderedAt","renderGenerationId","parentProjectId","dirty","outputs"],"additionalProperties":{}},"example":{"id":"01990000-0000-7000-8000-000000000001","createdAt":"2026-09-19T12:00:00.000Z","updatedAt":"2026-09-19T12:00:00.000Z","data":{},"title":"example","status":"analyzing","progress":1,"error":"example","isVideo":true,"duration":1,"sourceLocale":"example","targetDialect":"example","voiceMode":"voice","voiceId":"01990000-0000-7000-8000-000000000001","background":"keep","segments":[{"id":"example","start":1,"end":1,"speaker":"example","source":"example","target":"example","fit":"ok","locked":true,"style":"example","speed":0.8,"voiceId":"01990000-0000-7000-8000-000000000001","edited":true}],"speakers":[{"id":"example","label":"example","gender":"male","description":"example","voiceId":"01990000-0000-7000-8000-000000000001","cloneStatus":"processing","lines":-9007199254740991,"seconds":1}],"glossary":[{"term":"example","translation":"example"}],"options":{"burnSubtitles":false,"subtitleStyle":"boxed"},"sourceUrl":"http://localhost:4000/example","estimateCredits":-9007199254740991,"renderedAt":"2026-09-19T12:00:00.000Z","clientId":"01990000-0000-7000-8000-000000000001","approval":{"status":"pending","reviewId":"01990000-0000-7000-8000-000000000001"},"renderGenerationId":"01990000-0000-7000-8000-000000000001","parentProjectId":"01990000-0000-7000-8000-000000000001","dirty":true,"outputs":{"mp4":"example","mp4Subtitled":"example","mp3":"example","wav":"example","srt":"example","sourceSrt":"example","vtt":"example","sourceVtt":"example"},"downloads":{}}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/dubbing/projects/{id}/retry","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/dubbing/projects/{id}/retry","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/dubbing/projects/{id}/retry","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/dubbing/projects/{id}/retry","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/dubbing/projects/{id}/retry","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/dubbing/projects/{id}/retry","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/dubbing/projects/{id}/retry","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/dubbing/projects/{id}/retry","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/dubbing/projects/{id}/retry","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/dubbing/projects/{id}/retry","traceId":"request-id"}}}}}}},"/v1/dubbing/projects/{id}/segments/{segmentId}/split":{"post":{"operationId":"splitDubSegment","tags":["Dubbing"],"summary":"split Dub Segment","description":"Requires workspace role editor or above. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"segmentId","in":"path","required":true,"schema":{"type":"string"}},{"name":"X-CSRF-Token","in":"header","required":false,"description":"Required for cookie-authenticated mutations; returned by sign-in/sign-up.","schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"at":{"type":"number","description":"Split time in seconds, inside the line"},"targetIndex":{"description":"Character index in the Arabic line where the second part starts; estimated from the time when omitted","type":"integer","minimum":0,"maximum":9007199254740991}},"required":["at"]},"example":{"at":1,"targetIndex":0}}}},"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","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)$"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"},"data":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}},"title":{"type":"string"},"status":{"type":"string","enum":["analyzing","translating","cloning","review","rendering","ready","failed"]},"progress":{"type":"number"},"error":{"type":["string","null"]},"isVideo":{"type":"boolean"},"duration":{"type":"number"},"sourceLocale":{"type":"string"},"targetDialect":{"type":"string"},"voiceMode":{"type":"string","enum":["voice","clone-speaker","auto-cast"]},"voiceId":{"anyOf":[{"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)$"},{"type":"null"}]},"background":{"type":"string","enum":["keep","remove"]},"segments":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"start":{"type":"number"},"end":{"type":"number"},"speaker":{"description":"Speaker id (S1, S2…) from speaker detection","type":"string"},"source":{"type":"string"},"target":{"type":"string"},"fit":{"description":"Estimated fit of the dubbed line in its slot","type":"string","enum":["ok","long","short"]},"locked":{"description":"Kept as written by retranslate and batch rewrites","type":"boolean"},"style":{"description":"Delivery for this line, e.g. \"excited\" or \"whisper\"","type":"string","maxLength":200},"speed":{"description":"Pace preference (1 = natural)","type":"number","minimum":0.8,"maximum":1.25},"voiceId":{"description":"Voice for this line only, overriding its speaker","anyOf":[{"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)$"},{"type":"null"}]},"edited":{"description":"Changed since the last render","type":"boolean"}},"required":["id","start","end","source","target"]}},"speakers":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"label":{"type":"string","maxLength":60},"gender":{"type":"string","enum":["male","female","unknown"]},"description":{"type":"string","maxLength":200},"voiceId":{"anyOf":[{"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)$"},{"type":"null"}],"description":"Voice this speaker is dubbed with"},"cloneStatus":{"description":"Set while or after cloning this speaker","type":"string","enum":["processing","ready","failed"]},"lines":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"seconds":{"type":"number"}},"required":["id","label","gender","voiceId","lines","seconds"]}},"glossary":{"type":"array","items":{"type":"object","properties":{"term":{"type":"string","minLength":1,"maxLength":100},"translation":{"anyOf":[{"type":"string","maxLength":200},{"type":"null"}],"description":"Fixed translation; null keeps the term as-is"}},"required":["term","translation"]}},"options":{"type":"object","properties":{"burnSubtitles":{"default":false,"description":"Also export an MP4 with Arabic subtitles burned in","type":"boolean"},"subtitleStyle":{"default":"boxed","type":"string","enum":["clean","boxed","bold"]}}},"sourceUrl":{"type":["string","null"]},"estimateCredits":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"renderedAt":{"type":["string","null"]},"clientId":{"anyOf":[{"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)$"},{"type":"null"}]},"approval":{"description":"Latest review of the current render","anyOf":[{"type":"object","properties":{"status":{"type":"string","enum":["pending","approved","changes_requested","cancelled"]},"reviewId":{"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)$"}},"required":["status","reviewId"]},{"type":"null"}]},"renderGenerationId":{"anyOf":[{"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)$"},{"type":"null"}],"description":"Generation of the latest render (share it, find it in the Library)"},"parentProjectId":{"anyOf":[{"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)$"},{"type":"null"}],"description":"Project this one was duplicated from"},"dirty":{"type":"boolean","description":"Edited since the last render"},"outputs":{"type":"object","properties":{"mp4":{"type":"string"},"mp4Subtitled":{"type":"string"},"mp3":{"type":"string"},"wav":{"type":"string"},"srt":{"type":"string"},"sourceSrt":{"type":"string"},"vtt":{"type":"string"},"sourceVtt":{"type":"string"}},"description":"Inline URLs of the rendered files (playback)"},"downloads":{"description":"The same files as named downloads (Content-Disposition attachment), keyed like `outputs`","type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"string"}}},"required":["id","createdAt","updatedAt","title","status","progress","error","isVideo","duration","sourceLocale","targetDialect","voiceMode","voiceId","background","segments","speakers","glossary","options","sourceUrl","estimateCredits","renderedAt","renderGenerationId","parentProjectId","dirty","outputs"],"additionalProperties":{}},"example":{"id":"01990000-0000-7000-8000-000000000001","createdAt":"2026-09-19T12:00:00.000Z","updatedAt":"2026-09-19T12:00:00.000Z","data":{},"title":"example","status":"analyzing","progress":1,"error":"example","isVideo":true,"duration":1,"sourceLocale":"example","targetDialect":"example","voiceMode":"voice","voiceId":"01990000-0000-7000-8000-000000000001","background":"keep","segments":[{"id":"example","start":1,"end":1,"speaker":"example","source":"example","target":"example","fit":"ok","locked":true,"style":"example","speed":0.8,"voiceId":"01990000-0000-7000-8000-000000000001","edited":true}],"speakers":[{"id":"example","label":"example","gender":"male","description":"example","voiceId":"01990000-0000-7000-8000-000000000001","cloneStatus":"processing","lines":-9007199254740991,"seconds":1}],"glossary":[{"term":"example","translation":"example"}],"options":{"burnSubtitles":false,"subtitleStyle":"boxed"},"sourceUrl":"http://localhost:4000/example","estimateCredits":-9007199254740991,"renderedAt":"2026-09-19T12:00:00.000Z","clientId":"01990000-0000-7000-8000-000000000001","approval":{"status":"pending","reviewId":"01990000-0000-7000-8000-000000000001"},"renderGenerationId":"01990000-0000-7000-8000-000000000001","parentProjectId":"01990000-0000-7000-8000-000000000001","dirty":true,"outputs":{"mp4":"example","mp4Subtitled":"example","mp3":"example","wav":"example","srt":"example","sourceSrt":"example","vtt":"example","sourceVtt":"example"},"downloads":{}}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/dubbing/projects/{id}/segments/{segmentId}/split","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/dubbing/projects/{id}/segments/{segmentId}/split","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/dubbing/projects/{id}/segments/{segmentId}/split","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/dubbing/projects/{id}/segments/{segmentId}/split","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/dubbing/projects/{id}/segments/{segmentId}/split","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/dubbing/projects/{id}/segments/{segmentId}/split","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/dubbing/projects/{id}/segments/{segmentId}/split","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/dubbing/projects/{id}/segments/{segmentId}/split","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/dubbing/projects/{id}/segments/{segmentId}/split","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/dubbing/projects/{id}/segments/{segmentId}/split","traceId":"request-id"}}}}}}},"/v1/dubbing/projects/{id}/segments/{segmentId}/merge":{"post":{"operationId":"mergeDubSegment","tags":["Dubbing"],"summary":"Merge the line with the one after it","description":"Requires workspace role editor or above. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"segmentId","in":"path","required":true,"schema":{"type":"string"}},{"name":"X-CSRF-Token","in":"header","required":false,"description":"Required for cookie-authenticated mutations; returned by sign-in/sign-up.","schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","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)$"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"},"data":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}},"title":{"type":"string"},"status":{"type":"string","enum":["analyzing","translating","cloning","review","rendering","ready","failed"]},"progress":{"type":"number"},"error":{"type":["string","null"]},"isVideo":{"type":"boolean"},"duration":{"type":"number"},"sourceLocale":{"type":"string"},"targetDialect":{"type":"string"},"voiceMode":{"type":"string","enum":["voice","clone-speaker","auto-cast"]},"voiceId":{"anyOf":[{"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)$"},{"type":"null"}]},"background":{"type":"string","enum":["keep","remove"]},"segments":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"start":{"type":"number"},"end":{"type":"number"},"speaker":{"description":"Speaker id (S1, S2…) from speaker detection","type":"string"},"source":{"type":"string"},"target":{"type":"string"},"fit":{"description":"Estimated fit of the dubbed line in its slot","type":"string","enum":["ok","long","short"]},"locked":{"description":"Kept as written by retranslate and batch rewrites","type":"boolean"},"style":{"description":"Delivery for this line, e.g. \"excited\" or \"whisper\"","type":"string","maxLength":200},"speed":{"description":"Pace preference (1 = natural)","type":"number","minimum":0.8,"maximum":1.25},"voiceId":{"description":"Voice for this line only, overriding its speaker","anyOf":[{"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)$"},{"type":"null"}]},"edited":{"description":"Changed since the last render","type":"boolean"}},"required":["id","start","end","source","target"]}},"speakers":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"label":{"type":"string","maxLength":60},"gender":{"type":"string","enum":["male","female","unknown"]},"description":{"type":"string","maxLength":200},"voiceId":{"anyOf":[{"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)$"},{"type":"null"}],"description":"Voice this speaker is dubbed with"},"cloneStatus":{"description":"Set while or after cloning this speaker","type":"string","enum":["processing","ready","failed"]},"lines":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"seconds":{"type":"number"}},"required":["id","label","gender","voiceId","lines","seconds"]}},"glossary":{"type":"array","items":{"type":"object","properties":{"term":{"type":"string","minLength":1,"maxLength":100},"translation":{"anyOf":[{"type":"string","maxLength":200},{"type":"null"}],"description":"Fixed translation; null keeps the term as-is"}},"required":["term","translation"]}},"options":{"type":"object","properties":{"burnSubtitles":{"default":false,"description":"Also export an MP4 with Arabic subtitles burned in","type":"boolean"},"subtitleStyle":{"default":"boxed","type":"string","enum":["clean","boxed","bold"]}}},"sourceUrl":{"type":["string","null"]},"estimateCredits":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"renderedAt":{"type":["string","null"]},"clientId":{"anyOf":[{"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)$"},{"type":"null"}]},"approval":{"description":"Latest review of the current render","anyOf":[{"type":"object","properties":{"status":{"type":"string","enum":["pending","approved","changes_requested","cancelled"]},"reviewId":{"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)$"}},"required":["status","reviewId"]},{"type":"null"}]},"renderGenerationId":{"anyOf":[{"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)$"},{"type":"null"}],"description":"Generation of the latest render (share it, find it in the Library)"},"parentProjectId":{"anyOf":[{"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)$"},{"type":"null"}],"description":"Project this one was duplicated from"},"dirty":{"type":"boolean","description":"Edited since the last render"},"outputs":{"type":"object","properties":{"mp4":{"type":"string"},"mp4Subtitled":{"type":"string"},"mp3":{"type":"string"},"wav":{"type":"string"},"srt":{"type":"string"},"sourceSrt":{"type":"string"},"vtt":{"type":"string"},"sourceVtt":{"type":"string"}},"description":"Inline URLs of the rendered files (playback)"},"downloads":{"description":"The same files as named downloads (Content-Disposition attachment), keyed like `outputs`","type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"string"}}},"required":["id","createdAt","updatedAt","title","status","progress","error","isVideo","duration","sourceLocale","targetDialect","voiceMode","voiceId","background","segments","speakers","glossary","options","sourceUrl","estimateCredits","renderedAt","renderGenerationId","parentProjectId","dirty","outputs"],"additionalProperties":{}},"example":{"id":"01990000-0000-7000-8000-000000000001","createdAt":"2026-09-19T12:00:00.000Z","updatedAt":"2026-09-19T12:00:00.000Z","data":{},"title":"example","status":"analyzing","progress":1,"error":"example","isVideo":true,"duration":1,"sourceLocale":"example","targetDialect":"example","voiceMode":"voice","voiceId":"01990000-0000-7000-8000-000000000001","background":"keep","segments":[{"id":"example","start":1,"end":1,"speaker":"example","source":"example","target":"example","fit":"ok","locked":true,"style":"example","speed":0.8,"voiceId":"01990000-0000-7000-8000-000000000001","edited":true}],"speakers":[{"id":"example","label":"example","gender":"male","description":"example","voiceId":"01990000-0000-7000-8000-000000000001","cloneStatus":"processing","lines":-9007199254740991,"seconds":1}],"glossary":[{"term":"example","translation":"example"}],"options":{"burnSubtitles":false,"subtitleStyle":"boxed"},"sourceUrl":"http://localhost:4000/example","estimateCredits":-9007199254740991,"renderedAt":"2026-09-19T12:00:00.000Z","clientId":"01990000-0000-7000-8000-000000000001","approval":{"status":"pending","reviewId":"01990000-0000-7000-8000-000000000001"},"renderGenerationId":"01990000-0000-7000-8000-000000000001","parentProjectId":"01990000-0000-7000-8000-000000000001","dirty":true,"outputs":{"mp4":"example","mp4Subtitled":"example","mp3":"example","wav":"example","srt":"example","sourceSrt":"example","vtt":"example","sourceVtt":"example"},"downloads":{}}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/dubbing/projects/{id}/segments/{segmentId}/merge","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/dubbing/projects/{id}/segments/{segmentId}/merge","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/dubbing/projects/{id}/segments/{segmentId}/merge","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/dubbing/projects/{id}/segments/{segmentId}/merge","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/dubbing/projects/{id}/segments/{segmentId}/merge","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/dubbing/projects/{id}/segments/{segmentId}/merge","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/dubbing/projects/{id}/segments/{segmentId}/merge","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/dubbing/projects/{id}/segments/{segmentId}/merge","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/dubbing/projects/{id}/segments/{segmentId}/merge","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/dubbing/projects/{id}/segments/{segmentId}/merge","traceId":"request-id"}}}}}}},"/v1/dubbing/projects/{id}/rewrite":{"post":{"operationId":"rewriteDubSegments","tags":["Dubbing"],"summary":"Suggest rewrites of lines (e.g. shorter to fit their slot); nothing is applied until the lines are patched","description":"Requires workspace role editor or above. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"X-CSRF-Token","in":"header","required":false,"description":"Required for cookie-authenticated mutations; returned by sign-in/sign-up.","schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"segmentIds":{"minItems":1,"maxItems":200,"type":"array","items":{"type":"string"}},"mode":{"type":"string","enum":["shorten","lengthen","natural","formal","casual","custom"]},"instruction":{"type":"string","maxLength":300}},"required":["segmentIds","mode"]},"example":{"segmentIds":["example"],"mode":"shorten","instruction":"example"}}}},"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"suggestions":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"before":{"type":"string"},"after":{"type":"string"},"fit":{"type":"string","enum":["ok","long","short"]}},"required":["id","before","after","fit"]}}},"required":["suggestions"]},"example":{"suggestions":[{"id":"example","before":"example","after":"example","fit":"ok"}]}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/dubbing/projects/{id}/rewrite","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/dubbing/projects/{id}/rewrite","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/dubbing/projects/{id}/rewrite","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/dubbing/projects/{id}/rewrite","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/dubbing/projects/{id}/rewrite","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/dubbing/projects/{id}/rewrite","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/dubbing/projects/{id}/rewrite","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/dubbing/projects/{id}/rewrite","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/dubbing/projects/{id}/rewrite","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/dubbing/projects/{id}/rewrite","traceId":"request-id"}}}}}}},"/v1/dubbing/projects/{id}/duplicate":{"post":{"operationId":"duplicateDubProject","tags":["Dubbing"],"summary":"A new project in another dialect that reuses this transcript and speakers (no new analysis)","description":"Requires workspace role editor or above. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"X-CSRF-Token","in":"header","required":false,"description":"Required for cookie-authenticated mutations; returned by sign-in/sign-up.","schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"targetDialect":{"type":"string","minLength":1,"maxLength":20},"title":{"type":"string","maxLength":120}},"required":["targetDialect"]},"example":{"targetDialect":"example","title":"example"}}}},"responses":{"201":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","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)$"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"},"data":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}},"title":{"type":"string"},"status":{"type":"string","enum":["analyzing","translating","cloning","review","rendering","ready","failed"]},"progress":{"type":"number"},"error":{"type":["string","null"]},"isVideo":{"type":"boolean"},"duration":{"type":"number"},"sourceLocale":{"type":"string"},"targetDialect":{"type":"string"},"voiceMode":{"type":"string","enum":["voice","clone-speaker","auto-cast"]},"voiceId":{"anyOf":[{"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)$"},{"type":"null"}]},"background":{"type":"string","enum":["keep","remove"]},"segments":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"start":{"type":"number"},"end":{"type":"number"},"speaker":{"description":"Speaker id (S1, S2…) from speaker detection","type":"string"},"source":{"type":"string"},"target":{"type":"string"},"fit":{"description":"Estimated fit of the dubbed line in its slot","type":"string","enum":["ok","long","short"]},"locked":{"description":"Kept as written by retranslate and batch rewrites","type":"boolean"},"style":{"description":"Delivery for this line, e.g. \"excited\" or \"whisper\"","type":"string","maxLength":200},"speed":{"description":"Pace preference (1 = natural)","type":"number","minimum":0.8,"maximum":1.25},"voiceId":{"description":"Voice for this line only, overriding its speaker","anyOf":[{"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)$"},{"type":"null"}]},"edited":{"description":"Changed since the last render","type":"boolean"}},"required":["id","start","end","source","target"]}},"speakers":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"label":{"type":"string","maxLength":60},"gender":{"type":"string","enum":["male","female","unknown"]},"description":{"type":"string","maxLength":200},"voiceId":{"anyOf":[{"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)$"},{"type":"null"}],"description":"Voice this speaker is dubbed with"},"cloneStatus":{"description":"Set while or after cloning this speaker","type":"string","enum":["processing","ready","failed"]},"lines":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"seconds":{"type":"number"}},"required":["id","label","gender","voiceId","lines","seconds"]}},"glossary":{"type":"array","items":{"type":"object","properties":{"term":{"type":"string","minLength":1,"maxLength":100},"translation":{"anyOf":[{"type":"string","maxLength":200},{"type":"null"}],"description":"Fixed translation; null keeps the term as-is"}},"required":["term","translation"]}},"options":{"type":"object","properties":{"burnSubtitles":{"default":false,"description":"Also export an MP4 with Arabic subtitles burned in","type":"boolean"},"subtitleStyle":{"default":"boxed","type":"string","enum":["clean","boxed","bold"]}}},"sourceUrl":{"type":["string","null"]},"estimateCredits":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"renderedAt":{"type":["string","null"]},"clientId":{"anyOf":[{"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)$"},{"type":"null"}]},"approval":{"description":"Latest review of the current render","anyOf":[{"type":"object","properties":{"status":{"type":"string","enum":["pending","approved","changes_requested","cancelled"]},"reviewId":{"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)$"}},"required":["status","reviewId"]},{"type":"null"}]},"renderGenerationId":{"anyOf":[{"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)$"},{"type":"null"}],"description":"Generation of the latest render (share it, find it in the Library)"},"parentProjectId":{"anyOf":[{"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)$"},{"type":"null"}],"description":"Project this one was duplicated from"},"dirty":{"type":"boolean","description":"Edited since the last render"},"outputs":{"type":"object","properties":{"mp4":{"type":"string"},"mp4Subtitled":{"type":"string"},"mp3":{"type":"string"},"wav":{"type":"string"},"srt":{"type":"string"},"sourceSrt":{"type":"string"},"vtt":{"type":"string"},"sourceVtt":{"type":"string"}},"description":"Inline URLs of the rendered files (playback)"},"downloads":{"description":"The same files as named downloads (Content-Disposition attachment), keyed like `outputs`","type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"string"}}},"required":["id","createdAt","updatedAt","title","status","progress","error","isVideo","duration","sourceLocale","targetDialect","voiceMode","voiceId","background","segments","speakers","glossary","options","sourceUrl","estimateCredits","renderedAt","renderGenerationId","parentProjectId","dirty","outputs"],"additionalProperties":{}},"example":{"id":"01990000-0000-7000-8000-000000000001","createdAt":"2026-09-19T12:00:00.000Z","updatedAt":"2026-09-19T12:00:00.000Z","data":{},"title":"example","status":"analyzing","progress":1,"error":"example","isVideo":true,"duration":1,"sourceLocale":"example","targetDialect":"example","voiceMode":"voice","voiceId":"01990000-0000-7000-8000-000000000001","background":"keep","segments":[{"id":"example","start":1,"end":1,"speaker":"example","source":"example","target":"example","fit":"ok","locked":true,"style":"example","speed":0.8,"voiceId":"01990000-0000-7000-8000-000000000001","edited":true}],"speakers":[{"id":"example","label":"example","gender":"male","description":"example","voiceId":"01990000-0000-7000-8000-000000000001","cloneStatus":"processing","lines":-9007199254740991,"seconds":1}],"glossary":[{"term":"example","translation":"example"}],"options":{"burnSubtitles":false,"subtitleStyle":"boxed"},"sourceUrl":"http://localhost:4000/example","estimateCredits":-9007199254740991,"renderedAt":"2026-09-19T12:00:00.000Z","clientId":"01990000-0000-7000-8000-000000000001","approval":{"status":"pending","reviewId":"01990000-0000-7000-8000-000000000001"},"renderGenerationId":"01990000-0000-7000-8000-000000000001","parentProjectId":"01990000-0000-7000-8000-000000000001","dirty":true,"outputs":{"mp4":"example","mp4Subtitled":"example","mp3":"example","wav":"example","srt":"example","sourceSrt":"example","vtt":"example","sourceVtt":"example"},"downloads":{}}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/dubbing/projects/{id}/duplicate","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/dubbing/projects/{id}/duplicate","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/dubbing/projects/{id}/duplicate","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/dubbing/projects/{id}/duplicate","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/dubbing/projects/{id}/duplicate","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/dubbing/projects/{id}/duplicate","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/dubbing/projects/{id}/duplicate","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/dubbing/projects/{id}/duplicate","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/dubbing/projects/{id}/duplicate","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/dubbing/projects/{id}/duplicate","traceId":"request-id"}}}}}}},"/v1/dubbing/projects/{id}/speakers/{speakerId}/clone":{"post":{"operationId":"cloneDubSpeaker","tags":["Dubbing"],"summary":"Clone one speaker from the source and use the clone for their lines","description":"Requires workspace role editor or above. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"speakerId","in":"path","required":true,"schema":{"type":"string"}},{"name":"X-CSRF-Token","in":"header","required":false,"description":"Required for cookie-authenticated mutations; returned by sign-in/sign-up.","schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"consent":{"type":"object","properties":{"basis":{"type":"string","enum":["self","permission"],"description":"self = the user’s own voice; permission = someone who gave written permission"},"speakerName":{"description":"Required when basis is permission","type":"string","maxLength":120},"confirmed":{"type":"boolean","const":true},"notPublicFigure":{"type":"boolean","const":true},"policyVersion":{"type":"string","minLength":1,"maxLength":20}},"required":["basis","confirmed","notPublicFigure","policyVersion"]}},"required":["consent"]},"example":{"consent":{"basis":"self","speakerName":"example","confirmed":true,"notPublicFigure":true,"policyVersion":"example"}}}}},"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","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)$"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"},"data":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}},"title":{"type":"string"},"status":{"type":"string","enum":["analyzing","translating","cloning","review","rendering","ready","failed"]},"progress":{"type":"number"},"error":{"type":["string","null"]},"isVideo":{"type":"boolean"},"duration":{"type":"number"},"sourceLocale":{"type":"string"},"targetDialect":{"type":"string"},"voiceMode":{"type":"string","enum":["voice","clone-speaker","auto-cast"]},"voiceId":{"anyOf":[{"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)$"},{"type":"null"}]},"background":{"type":"string","enum":["keep","remove"]},"segments":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"start":{"type":"number"},"end":{"type":"number"},"speaker":{"description":"Speaker id (S1, S2…) from speaker detection","type":"string"},"source":{"type":"string"},"target":{"type":"string"},"fit":{"description":"Estimated fit of the dubbed line in its slot","type":"string","enum":["ok","long","short"]},"locked":{"description":"Kept as written by retranslate and batch rewrites","type":"boolean"},"style":{"description":"Delivery for this line, e.g. \"excited\" or \"whisper\"","type":"string","maxLength":200},"speed":{"description":"Pace preference (1 = natural)","type":"number","minimum":0.8,"maximum":1.25},"voiceId":{"description":"Voice for this line only, overriding its speaker","anyOf":[{"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)$"},{"type":"null"}]},"edited":{"description":"Changed since the last render","type":"boolean"}},"required":["id","start","end","source","target"]}},"speakers":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"label":{"type":"string","maxLength":60},"gender":{"type":"string","enum":["male","female","unknown"]},"description":{"type":"string","maxLength":200},"voiceId":{"anyOf":[{"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)$"},{"type":"null"}],"description":"Voice this speaker is dubbed with"},"cloneStatus":{"description":"Set while or after cloning this speaker","type":"string","enum":["processing","ready","failed"]},"lines":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"seconds":{"type":"number"}},"required":["id","label","gender","voiceId","lines","seconds"]}},"glossary":{"type":"array","items":{"type":"object","properties":{"term":{"type":"string","minLength":1,"maxLength":100},"translation":{"anyOf":[{"type":"string","maxLength":200},{"type":"null"}],"description":"Fixed translation; null keeps the term as-is"}},"required":["term","translation"]}},"options":{"type":"object","properties":{"burnSubtitles":{"default":false,"description":"Also export an MP4 with Arabic subtitles burned in","type":"boolean"},"subtitleStyle":{"default":"boxed","type":"string","enum":["clean","boxed","bold"]}}},"sourceUrl":{"type":["string","null"]},"estimateCredits":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"renderedAt":{"type":["string","null"]},"clientId":{"anyOf":[{"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)$"},{"type":"null"}]},"approval":{"description":"Latest review of the current render","anyOf":[{"type":"object","properties":{"status":{"type":"string","enum":["pending","approved","changes_requested","cancelled"]},"reviewId":{"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)$"}},"required":["status","reviewId"]},{"type":"null"}]},"renderGenerationId":{"anyOf":[{"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)$"},{"type":"null"}],"description":"Generation of the latest render (share it, find it in the Library)"},"parentProjectId":{"anyOf":[{"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)$"},{"type":"null"}],"description":"Project this one was duplicated from"},"dirty":{"type":"boolean","description":"Edited since the last render"},"outputs":{"type":"object","properties":{"mp4":{"type":"string"},"mp4Subtitled":{"type":"string"},"mp3":{"type":"string"},"wav":{"type":"string"},"srt":{"type":"string"},"sourceSrt":{"type":"string"},"vtt":{"type":"string"},"sourceVtt":{"type":"string"}},"description":"Inline URLs of the rendered files (playback)"},"downloads":{"description":"The same files as named downloads (Content-Disposition attachment), keyed like `outputs`","type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"string"}}},"required":["id","createdAt","updatedAt","title","status","progress","error","isVideo","duration","sourceLocale","targetDialect","voiceMode","voiceId","background","segments","speakers","glossary","options","sourceUrl","estimateCredits","renderedAt","renderGenerationId","parentProjectId","dirty","outputs"],"additionalProperties":{}},"example":{"id":"01990000-0000-7000-8000-000000000001","createdAt":"2026-09-19T12:00:00.000Z","updatedAt":"2026-09-19T12:00:00.000Z","data":{},"title":"example","status":"analyzing","progress":1,"error":"example","isVideo":true,"duration":1,"sourceLocale":"example","targetDialect":"example","voiceMode":"voice","voiceId":"01990000-0000-7000-8000-000000000001","background":"keep","segments":[{"id":"example","start":1,"end":1,"speaker":"example","source":"example","target":"example","fit":"ok","locked":true,"style":"example","speed":0.8,"voiceId":"01990000-0000-7000-8000-000000000001","edited":true}],"speakers":[{"id":"example","label":"example","gender":"male","description":"example","voiceId":"01990000-0000-7000-8000-000000000001","cloneStatus":"processing","lines":-9007199254740991,"seconds":1}],"glossary":[{"term":"example","translation":"example"}],"options":{"burnSubtitles":false,"subtitleStyle":"boxed"},"sourceUrl":"http://localhost:4000/example","estimateCredits":-9007199254740991,"renderedAt":"2026-09-19T12:00:00.000Z","clientId":"01990000-0000-7000-8000-000000000001","approval":{"status":"pending","reviewId":"01990000-0000-7000-8000-000000000001"},"renderGenerationId":"01990000-0000-7000-8000-000000000001","parentProjectId":"01990000-0000-7000-8000-000000000001","dirty":true,"outputs":{"mp4":"example","mp4Subtitled":"example","mp3":"example","wav":"example","srt":"example","sourceSrt":"example","vtt":"example","sourceVtt":"example"},"downloads":{}}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/dubbing/projects/{id}/speakers/{speakerId}/clone","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/dubbing/projects/{id}/speakers/{speakerId}/clone","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/dubbing/projects/{id}/speakers/{speakerId}/clone","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/dubbing/projects/{id}/speakers/{speakerId}/clone","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/dubbing/projects/{id}/speakers/{speakerId}/clone","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/dubbing/projects/{id}/speakers/{speakerId}/clone","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/dubbing/projects/{id}/speakers/{speakerId}/clone","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/dubbing/projects/{id}/speakers/{speakerId}/clone","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/dubbing/projects/{id}/speakers/{speakerId}/clone","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/dubbing/projects/{id}/speakers/{speakerId}/clone","traceId":"request-id"}}}}}}},"/v1/dubbing/projects/{id}/render":{"post":{"operationId":"renderDubProject","tags":["Dubbing"],"summary":"Voice every line, fit it to its slot, mix over the background and export video, audio and subtitles","description":"Requires workspace role editor or above. Retry with the same Idempotency-Key and identical body. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"Idempotency-Key","in":"header","required":true,"schema":{"type":"string","maxLength":200},"example":"request-2026-001"},{"name":"X-CSRF-Token","in":"header","required":false,"description":"Required for cookie-authenticated mutations; returned by sign-in/sign-up.","schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"burnSubtitles":{"default":false,"description":"Also export an MP4 with Arabic subtitles burned in","type":"boolean"},"subtitleStyle":{"default":"boxed","type":"string","enum":["clean","boxed","bold"]}}},"example":{"burnSubtitles":false,"subtitleStyle":"boxed"}}}},"responses":{"202":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","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)$"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"},"data":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}},"title":{"type":"string"},"status":{"type":"string","enum":["analyzing","translating","cloning","review","rendering","ready","failed"]},"progress":{"type":"number"},"error":{"type":["string","null"]},"isVideo":{"type":"boolean"},"duration":{"type":"number"},"sourceLocale":{"type":"string"},"targetDialect":{"type":"string"},"voiceMode":{"type":"string","enum":["voice","clone-speaker","auto-cast"]},"voiceId":{"anyOf":[{"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)$"},{"type":"null"}]},"background":{"type":"string","enum":["keep","remove"]},"segments":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"start":{"type":"number"},"end":{"type":"number"},"speaker":{"description":"Speaker id (S1, S2…) from speaker detection","type":"string"},"source":{"type":"string"},"target":{"type":"string"},"fit":{"description":"Estimated fit of the dubbed line in its slot","type":"string","enum":["ok","long","short"]},"locked":{"description":"Kept as written by retranslate and batch rewrites","type":"boolean"},"style":{"description":"Delivery for this line, e.g. \"excited\" or \"whisper\"","type":"string","maxLength":200},"speed":{"description":"Pace preference (1 = natural)","type":"number","minimum":0.8,"maximum":1.25},"voiceId":{"description":"Voice for this line only, overriding its speaker","anyOf":[{"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)$"},{"type":"null"}]},"edited":{"description":"Changed since the last render","type":"boolean"}},"required":["id","start","end","source","target"]}},"speakers":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"label":{"type":"string","maxLength":60},"gender":{"type":"string","enum":["male","female","unknown"]},"description":{"type":"string","maxLength":200},"voiceId":{"anyOf":[{"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)$"},{"type":"null"}],"description":"Voice this speaker is dubbed with"},"cloneStatus":{"description":"Set while or after cloning this speaker","type":"string","enum":["processing","ready","failed"]},"lines":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"seconds":{"type":"number"}},"required":["id","label","gender","voiceId","lines","seconds"]}},"glossary":{"type":"array","items":{"type":"object","properties":{"term":{"type":"string","minLength":1,"maxLength":100},"translation":{"anyOf":[{"type":"string","maxLength":200},{"type":"null"}],"description":"Fixed translation; null keeps the term as-is"}},"required":["term","translation"]}},"options":{"type":"object","properties":{"burnSubtitles":{"default":false,"description":"Also export an MP4 with Arabic subtitles burned in","type":"boolean"},"subtitleStyle":{"default":"boxed","type":"string","enum":["clean","boxed","bold"]}}},"sourceUrl":{"type":["string","null"]},"estimateCredits":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"renderedAt":{"type":["string","null"]},"clientId":{"anyOf":[{"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)$"},{"type":"null"}]},"approval":{"description":"Latest review of the current render","anyOf":[{"type":"object","properties":{"status":{"type":"string","enum":["pending","approved","changes_requested","cancelled"]},"reviewId":{"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)$"}},"required":["status","reviewId"]},{"type":"null"}]},"renderGenerationId":{"anyOf":[{"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)$"},{"type":"null"}],"description":"Generation of the latest render (share it, find it in the Library)"},"parentProjectId":{"anyOf":[{"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)$"},{"type":"null"}],"description":"Project this one was duplicated from"},"dirty":{"type":"boolean","description":"Edited since the last render"},"outputs":{"type":"object","properties":{"mp4":{"type":"string"},"mp4Subtitled":{"type":"string"},"mp3":{"type":"string"},"wav":{"type":"string"},"srt":{"type":"string"},"sourceSrt":{"type":"string"},"vtt":{"type":"string"},"sourceVtt":{"type":"string"}},"description":"Inline URLs of the rendered files (playback)"},"downloads":{"description":"The same files as named downloads (Content-Disposition attachment), keyed like `outputs`","type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"string"}}},"required":["id","createdAt","updatedAt","title","status","progress","error","isVideo","duration","sourceLocale","targetDialect","voiceMode","voiceId","background","segments","speakers","glossary","options","sourceUrl","estimateCredits","renderedAt","renderGenerationId","parentProjectId","dirty","outputs"],"additionalProperties":{}},"example":{"id":"01990000-0000-7000-8000-000000000001","createdAt":"2026-09-19T12:00:00.000Z","updatedAt":"2026-09-19T12:00:00.000Z","data":{},"title":"example","status":"analyzing","progress":1,"error":"example","isVideo":true,"duration":1,"sourceLocale":"example","targetDialect":"example","voiceMode":"voice","voiceId":"01990000-0000-7000-8000-000000000001","background":"keep","segments":[{"id":"example","start":1,"end":1,"speaker":"example","source":"example","target":"example","fit":"ok","locked":true,"style":"example","speed":0.8,"voiceId":"01990000-0000-7000-8000-000000000001","edited":true}],"speakers":[{"id":"example","label":"example","gender":"male","description":"example","voiceId":"01990000-0000-7000-8000-000000000001","cloneStatus":"processing","lines":-9007199254740991,"seconds":1}],"glossary":[{"term":"example","translation":"example"}],"options":{"burnSubtitles":false,"subtitleStyle":"boxed"},"sourceUrl":"http://localhost:4000/example","estimateCredits":-9007199254740991,"renderedAt":"2026-09-19T12:00:00.000Z","clientId":"01990000-0000-7000-8000-000000000001","approval":{"status":"pending","reviewId":"01990000-0000-7000-8000-000000000001"},"renderGenerationId":"01990000-0000-7000-8000-000000000001","parentProjectId":"01990000-0000-7000-8000-000000000001","dirty":true,"outputs":{"mp4":"example","mp4Subtitled":"example","mp3":"example","wav":"example","srt":"example","sourceSrt":"example","vtt":"example","sourceVtt":"example"},"downloads":{}}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/dubbing/projects/{id}/render","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/dubbing/projects/{id}/render","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/dubbing/projects/{id}/render","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/dubbing/projects/{id}/render","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/dubbing/projects/{id}/render","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/dubbing/projects/{id}/render","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/dubbing/projects/{id}/render","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/dubbing/projects/{id}/render","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/dubbing/projects/{id}/render","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/dubbing/projects/{id}/render","traceId":"request-id"}}}}}}},"/v1/video/options":{"get":{"operationId":"getVideoOptions","tags":["Video"],"summary":"Plan limits for video (entitlements resolved), seconds used this month, the tiers the plan may use with their durations, resolutions and aspect ratios, whether video is available, and the music styles","description":"Requires workspace role viewer or above. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false}],"security":[{"session":[]},{"apiKey":[]}],"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"plan":{"type":"string"},"limits":{"type":"object","properties":{"videoGeneration":{"default":false,"description":"AI video generation (Video studio); refusals are 403 with errors[0].path = the entitlement key","type":"boolean"},"videoSecondsPerMonth":{"default":0,"description":"Video seconds a workspace may render per calendar month (UTC); 0 = none","type":"integer","minimum":0,"maximum":1000000},"videoMaxSecondsPerVideo":{"default":0,"description":"Longest video (seconds of voice-over) a project may have","type":"integer","minimum":0,"maximum":600},"videoMaxResolution":{"default":"720p","description":"Highest output resolution","type":"string","enum":["720p","1080p","4k"]},"videoAspectRatios":{"default":[],"description":"Aspect ratios the plan may render","maxItems":3,"type":"array","items":{"type":"string","enum":["9:16","16:9","1:1"]}},"videoTiers":{"default":[],"description":"Video quality tiers (product model slugs with data.kind = video) the plan may use","maxItems":20,"type":"array","items":{"type":"string","minLength":1,"maxLength":100}},"videoConcurrentRenders":{"default":0,"description":"Scenes rendering at once, and projects rendering at once, per workspace","type":"integer","minimum":0,"maximum":32},"videoStoryboard":{"default":false,"description":"Storyboard stills for approval before rendering","type":"boolean"},"videoImageToVideo":{"default":false,"description":"Upload a product photo as the first frame","type":"boolean"},"videoMusicBed":{"default":false,"description":"Background music bed ducked under the voice","type":"boolean"},"videoWatermark":{"default":true,"description":"Burn a small Vocla watermark into the video","type":"boolean"},"videoProjects":{"default":0,"description":"Active (not deleted) video projects a workspace may keep","type":"integer","minimum":0,"maximum":100000}}},"usedSeconds":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Video seconds used this calendar month (UTC), renders in progress included"},"remainingSeconds":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Seconds left this month"},"tiers":{"type":"array","items":{"type":"object","properties":{"slug":{"type":"string"},"name":{"type":"object","properties":{"ar":{"type":"string","minLength":1},"en":{"type":"string","minLength":1}},"required":["ar","en"]},"productModelId":{"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)$"},"creditsPerSecond":{"type":"number","description":"Credits per second at the base resolution"},"creditsPerSecondByResolution":{"description":"Rates for resolutions that cost more (e.g. {\"1080p\":350}); every other resolution is creditsPerSecond","type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"number"}},"durations":{"type":"array","items":{"type":"number"},"description":"Clip lengths the model renders (a scene is rendered at the shortest one at or above its length)"},"resolutions":{"type":"array","items":{"type":"string"}},"aspectRatios":{"type":"array","items":{"type":"string"}},"imageToVideo":{"type":"boolean"},"available":{"type":"boolean","description":"A real provider serves this tier"},"unavailableReason":{"description":"Why the tier cannot render: missing = its OpenRouter model is no longer on OpenRouter; no_provider = no real provider serves it","anyOf":[{"type":"string","enum":["disabled","missing","no_provider"]},{"type":"null"}]}},"required":["slug","name","productModelId","creditsPerSecond","durations","resolutions","aspectRatios","imageToVideo","available"]},"description":"Tiers the plan may use"},"lockedTiers":{"type":"array","items":{"type":"object","properties":{"slug":{"type":"string"},"name":{"type":"object","properties":{"ar":{"type":"string","minLength":1},"en":{"type":"string","minLength":1}},"required":["ar","en"]},"productModelId":{"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)$"},"creditsPerSecond":{"type":"number","description":"Credits per second at the base resolution"},"creditsPerSecondByResolution":{"description":"Rates for resolutions that cost more (e.g. {\"1080p\":350}); every other resolution is creditsPerSecond","type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"number"}},"durations":{"type":"array","items":{"type":"number"},"description":"Clip lengths the model renders (a scene is rendered at the shortest one at or above its length)"},"resolutions":{"type":"array","items":{"type":"string"}},"aspectRatios":{"type":"array","items":{"type":"string"}},"imageToVideo":{"type":"boolean"},"available":{"type":"boolean","description":"A real provider serves this tier"},"unavailableReason":{"description":"Why the tier cannot render: missing = its OpenRouter model is no longer on OpenRouter; no_provider = no real provider serves it","anyOf":[{"type":"string","enum":["disabled","missing","no_provider"]},{"type":"null"}]}},"required":["slug","name","productModelId","creditsPerSecond","durations","resolutions","aspectRatios","imageToVideo","available"]},"description":"Tiers of higher plans (upgrade prompts)"},"available":{"type":"boolean","description":"Video generation is configured (a provider serves an allowed tier)"},"musicStyles":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"label":{"type":"object","properties":{"ar":{"type":"string","minLength":1},"en":{"type":"string","minLength":1}},"required":["ar","en"]},"prompt":{"type":"string"}},"required":["id","label","prompt"]}},"sceneSeconds":{"type":"object","properties":{"min":{"type":"number"},"max":{"type":"number"}},"required":["min","max"]},"pricing":{"type":"object","properties":{"storyboardStillCredits":{"type":"integer","minimum":0,"maximum":100000,"description":"Credits per AI storyboard still a render includes (photos the user uploads as stills are free)"},"musicBedCredits":{"type":"integer","minimum":0,"maximum":100000,"description":"Credits for the music bed (a speech model fixedCredits.musicBed overrides it)"}},"required":["storyboardStillCredits","musicBedCredits"],"description":"Credits per storyboard still and for the music bed (the quote is the exact figure)"}},"required":["plan","limits","usedSeconds","remainingSeconds","tiers","lockedTiers","available","musicStyles","sceneSeconds","pricing"]},"example":{"plan":"example","limits":{"videoGeneration":false,"videoSecondsPerMonth":0,"videoMaxSecondsPerVideo":0,"videoMaxResolution":"720p","videoAspectRatios":[],"videoTiers":[],"videoConcurrentRenders":0,"videoStoryboard":false,"videoImageToVideo":false,"videoMusicBed":false,"videoWatermark":true,"videoProjects":0},"usedSeconds":-9007199254740991,"remainingSeconds":-9007199254740991,"tiers":[{"slug":"example","name":{"ar":"مثال","en":"example"},"productModelId":"01990000-0000-7000-8000-000000000001","creditsPerSecond":1,"creditsPerSecondByResolution":{},"durations":[1],"resolutions":["example"],"aspectRatios":["example"],"imageToVideo":true,"available":true,"unavailableReason":"disabled"}],"lockedTiers":[{"slug":"example","name":{"ar":"مثال","en":"example"},"productModelId":"01990000-0000-7000-8000-000000000001","creditsPerSecond":1,"creditsPerSecondByResolution":{},"durations":[1],"resolutions":["example"],"aspectRatios":["example"],"imageToVideo":true,"available":true,"unavailableReason":"disabled"}],"available":true,"musicStyles":[{"id":"example","label":{"ar":"مثال","en":"example"},"prompt":"مرحباً بك في فوكلا."}],"sceneSeconds":{"min":1,"max":1},"pricing":{"storyboardStillCredits":0,"musicBedCredits":0}}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/video/options","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/video/options","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/video/options","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/video/options","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/video/options","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/video/options","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/video/options","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/video/options","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/video/options","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/video/options","traceId":"request-id"}}}}}}},"/v1/video/projects":{"get":{"operationId":"listVideoProjects","tags":["Video"],"summary":"list Video Projects","description":"Requires workspace role viewer or above. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"cursor","in":"query","required":false,"schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"schema":{"default":25,"type":"integer","minimum":1,"maximum":100}},{"name":"q","in":"query","required":false,"schema":{"type":"string","maxLength":200}}],"security":[{"session":[]},{"apiKey":[]}],"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"items":{"type":"array","items":{"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)$"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"},"data":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}},"title":{"type":"string"},"status":{"type":"string","enum":["draft","voicing","planning","planned","storyboarding","storyboarded","rendering","mixing","ready","failed"],"description":"planned and storyboarded wait for the user; failed keeps failedStage"},"stage":{"anyOf":[{"type":"string","enum":["voice","plan","storyboard","render","poll","mix"]},{"type":"null"}]},"progress":{"type":"number"},"error":{"description":"VOICE_FAILED, TOO_LONG, PLAN_FAILED, STORYBOARD_FAILED, SCENE_FAILED, RENDER_FAILED","type":["string","null"]},"failedStage":{"anyOf":[{"type":"string","enum":["voice","plan","storyboard","render","poll","mix"]},{"type":"null"}]},"script":{"type":"string"},"voiceId":{"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)$"},"dialect":{"type":"string"},"productModelId":{"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)$"},"tier":{"type":"string"},"aspectRatio":{"type":"string","enum":["9:16","16:9","1:1"]},"resolution":{"type":"string","enum":["720p","1080p","4k"]},"captions":{"type":"object","properties":{"enabled":{"default":true,"type":"boolean"},"style":{"default":"clean","type":"string","enum":["clean","bold","karaoke"]},"position":{"default":"bottom","type":"string","enum":["bottom","center"]}}},"music":{"type":"object","properties":{"enabled":{"type":"boolean"},"prompt":{"type":["string","null"]}},"required":["enabled","prompt"]},"imageUploadId":{"anyOf":[{"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)$"},{"type":"null"}]},"imageUploadIds":{"type":"array","items":{"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)$"}},"productStyle":{"anyOf":[{"type":"object","properties":{"id":{"type":"string","enum":["luxury","flash-sale","everyday","features","gift"],"description":"Ad style preset"},"season":{"type":"string","enum":["ramadan","eid","white-friday"],"description":"Seasonal variant of the gift style"}},"required":["id"]},{"type":"null"}]},"product":{"anyOf":[{"type":"object","properties":{"productName":{"type":"string","minLength":1,"maxLength":120},"category":{"default":"","type":"string","maxLength":120},"keyFeatures":{"default":[],"maxItems":8,"type":"array","items":{"type":"string","minLength":1,"maxLength":200}},"audience":{"default":"","type":"string","maxLength":300},"suggestedAngles":{"default":[],"maxItems":3,"type":"array","items":{"type":"string","maxLength":200}},"suggestedStyle":{"description":"The style the model suggests","type":"string","enum":["luxury","flash-sale","everyday","features","gift"]},"appearance":{"description":"English description of how the product looks (keeps it identical in the scene prompts)","type":"string","maxLength":600}},"required":["productName"]},{"type":"null"}]},"clientId":{"anyOf":[{"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)$"},{"type":"null"}]},"direction":{"description":"Visual direction given with the script (never spoken)","type":["string","null"]},"scenes":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"start":{"type":"number"},"end":{"type":"number"},"text":{"type":"string","description":"The words spoken in this scene"},"prompt":{"type":"string","description":"English visual prompt sent to the video model"},"status":{"type":"string","enum":["pending","queued","rendering","ready","failed"]},"frameUrl":{"description":"Storyboard still (the product photo for a scene that opens on one)","type":"string"},"imageIndex":{"description":"Index in imageUploadIds of the product photo this scene opens on","anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"imageUploadId":{"description":"The photo the person uploaded for this scene (PATCH scenes[].imageUploadId): the clip opens on it and no storyboard still is charged","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)$"},"clipUrl":{"description":"Rendered clip (no audio)","type":"string"},"error":{"description":"RENDER_FAILED, RENDER_TIMEOUT, SCENE_REJECTED","type":"string"},"renderSeconds":{"description":"Seconds the model renders for this scene","type":"number"}},"required":["id","start","end","text","prompt","status"]}},"duration":{"type":"number","description":"Seconds of voice-over (0 until voiced)"},"voiceUrl":{"type":["string","null"]},"words":{"description":"Recognised words of the voice-over with their times (full view, once voiced)","type":"array","items":{"type":"object","properties":{"word":{"type":"string"},"start":{"type":"number"},"end":{"type":"number"}},"required":["word","start","end"]}},"creditsReserved":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"creditsCharged":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"renderGenerationId":{"anyOf":[{"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)$"},{"type":"null"}]},"renderedAt":{"type":["string","null"]},"storyboard":{"type":"boolean","description":"Some scene has a storyboard still"},"output":{"type":"object","properties":{"videoUrl":{"type":["string","null"]},"downloadUrl":{"type":["string","null"]},"thumbnailUrl":{"type":["string","null"]},"watermarked":{"type":"boolean"},"generationId":{"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":"The render in the Library"},"duration":{"type":"number"}},"required":["videoUrl","downloadUrl","thumbnailUrl","watermarked","generationId","duration"]}},"required":["id","createdAt","updatedAt","title","status","stage","progress","error","failedStage","script","voiceId","dialect","productModelId","tier","aspectRatio","resolution","captions","music","imageUploadId","clientId","scenes","duration","voiceUrl","creditsReserved","creditsCharged","renderGenerationId","renderedAt","storyboard"],"additionalProperties":{}}},"nextCursor":{"type":["string","null"]}},"required":["items","nextCursor"]},"example":{"items":[{"id":"01990000-0000-7000-8000-000000000001","createdAt":"2026-09-19T12:00:00.000Z","updatedAt":"2026-09-19T12:00:00.000Z","data":{},"title":"example","status":"draft","stage":"voice","progress":1,"error":"example","failedStage":"voice","script":"example","voiceId":"01990000-0000-7000-8000-000000000001","dialect":"ar-SA","productModelId":"01990000-0000-7000-8000-000000000001","tier":"example","aspectRatio":"9:16","resolution":"720p","captions":{"enabled":true,"style":"clean","position":"bottom"},"music":{"enabled":true,"prompt":"مرحباً بك في فوكلا."},"imageUploadId":"01990000-0000-7000-8000-000000000001","imageUploadIds":["01990000-0000-7000-8000-000000000001"],"productStyle":{"id":"luxury","season":"ramadan"},"product":{"productName":"example","category":"","keyFeatures":[],"audience":"","suggestedAngles":[],"suggestedStyle":"luxury","appearance":"example"},"clientId":"01990000-0000-7000-8000-000000000001","direction":"example","scenes":[{"id":"example","start":1,"end":1,"text":"مرحباً بك في فوكلا.","prompt":"مرحباً بك في فوكلا.","status":"pending","frameUrl":"http://localhost:4000/example","imageIndex":-9007199254740991,"imageUploadId":"01990000-0000-7000-8000-000000000001","clipUrl":"http://localhost:4000/example","error":"example","renderSeconds":1}],"duration":1,"voiceUrl":"http://localhost:4000/example","words":[{"word":"example","start":1,"end":1}],"creditsReserved":-9007199254740991,"creditsCharged":-9007199254740991,"renderGenerationId":"01990000-0000-7000-8000-000000000001","renderedAt":"2026-09-19T12:00:00.000Z","storyboard":true,"output":{"videoUrl":"http://localhost:4000/example","downloadUrl":"http://localhost:4000/example","thumbnailUrl":"http://localhost:4000/example","watermarked":true,"generationId":"01990000-0000-7000-8000-000000000001","duration":1}}],"nextCursor":"example"}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/video/projects","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/video/projects","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/video/projects","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/video/projects","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/video/projects","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/video/projects","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/video/projects","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/video/projects","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/video/projects","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/video/projects","traceId":"request-id"}}}}}},"post":{"operationId":"createVideoProject","tags":["Video"],"summary":"Create a video project: voices the script, then plans the scenes (status planned when ready for review). A 403 names the plan limit in errors[0].path","description":"Requires workspace role editor or above. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"X-CSRF-Token","in":"header","required":false,"description":"Required for cookie-authenticated mutations; returned by sign-in/sign-up.","schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"title":{"type":"string","maxLength":120},"script":{"type":"string","minLength":1,"maxLength":6000,"description":"What the voice says; inline tags ([whisper], [pause 1s]) work as in text to speech"},"voiceId":{"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)$"},"dialect":{"description":"Dialect to speak in (e.g. ar-SA, ar-EG); default the voice dialect","type":"string","maxLength":20},"productModelId":{"description":"Speech model for the voice-over; default Vox Prime","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)$"},"params":{"type":"object","properties":{"speed":{"default":50,"type":"number","minimum":0,"maximum":100},"consistency":{"default":50,"type":"number","minimum":0,"maximum":100},"voiceMatch":{"default":75,"type":"number","minimum":0,"maximum":100},"expressiveness":{"default":50,"type":"number","minimum":0,"maximum":100},"clarity":{"default":75,"type":"number","minimum":0,"maximum":100},"energyMode":{"default":"normal","type":"string","enum":["normal","boost"]}}},"tier":{"type":"string","minLength":1,"maxLength":100,"description":"Video quality tier slug (vid-lite, vid-standard, vid-premium)"},"aspectRatio":{"type":"string","enum":["9:16","16:9","1:1"]},"resolution":{"type":"string","enum":["720p","1080p","4k"]},"captions":{"default":{"enabled":true,"style":"clean","position":"bottom"},"type":"object","properties":{"enabled":{"default":true,"type":"boolean"},"style":{"default":"clean","type":"string","enum":["clean","bold","karaoke"]},"position":{"default":"bottom","type":"string","enum":["bottom","center"]}}},"music":{"default":{"enabled":false},"type":"object","properties":{"enabled":{"default":false,"description":"Background music bed ducked under the voice (entitlement videoMusicBed)","type":"boolean"},"prompt":{"description":"Music style prompt: a musicStyles prompt from the options, or free text","type":"string","maxLength":300}}},"imageUploadId":{"description":"An image upload used as the first frame (entitlement videoImageToVideo)","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)$"},"imageUploadIds":{"description":"Product photos (entitlement videoImageToVideo): each scene opens on one of them, the first (hero) on the first scene; takes the place of imageUploadId","minItems":1,"maxItems":4,"type":"array","items":{"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)$"}},"productStyle":{"description":"Product video ad style: plans the scenes on its beats","type":"object","properties":{"id":{"type":"string","enum":["luxury","flash-sale","everyday","features","gift"],"description":"Ad style preset"},"season":{"type":"string","enum":["ramadan","eid","white-friday"],"description":"Seasonal variant of the gift style"}},"required":["id"]},"product":{"description":"Product facts (POST /v1/video/product/analyze) that keep scene prompts on the product","type":"object","properties":{"productName":{"type":"string","minLength":1,"maxLength":120},"category":{"default":"","type":"string","maxLength":120},"keyFeatures":{"default":[],"maxItems":8,"type":"array","items":{"type":"string","minLength":1,"maxLength":200}},"audience":{"default":"","type":"string","maxLength":300},"suggestedAngles":{"default":[],"maxItems":3,"type":"array","items":{"type":"string","maxLength":200}},"suggestedStyle":{"description":"The style the model suggests","type":"string","enum":["luxury","flash-sale","everyday","features","gift"]},"appearance":{"description":"English description of how the product looks (keeps it identical in the scene prompts)","type":"string","maxLength":600}},"required":["productName"]},"clientId":{"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)$"},"direction":{"description":"Visual direction for the scenes (style, characters, setting, action), e.g. what POST /v1/video/script-check separated from the script. Guides the scene planner; never spoken","type":"string","maxLength":2000},"scriptChecked":{"description":"The person saw Neo’s script check (POST /v1/video/script-check) and chose what the voice says. Without it the server runs the check itself: directions are kept out of the voice and guide the scenes, and a script with no words to speak is voiced with Neo’s suggested voice-over","type":"boolean"}},"required":["script","voiceId","tier","aspectRatio","resolution"]},"example":{"title":"example","script":"example","voiceId":"01990000-0000-7000-8000-000000000001","dialect":"ar-SA","productModelId":"01990000-0000-7000-8000-000000000001","params":{"speed":50,"consistency":50,"voiceMatch":75,"expressiveness":50,"clarity":75,"energyMode":"normal"},"tier":"example","aspectRatio":"9:16","resolution":"720p","captions":{"enabled":true,"style":"clean","position":"bottom"},"music":{"enabled":false},"imageUploadId":"01990000-0000-7000-8000-000000000001","imageUploadIds":["01990000-0000-7000-8000-000000000001"],"productStyle":{"id":"luxury","season":"ramadan"},"product":{"productName":"example","category":"","keyFeatures":[],"audience":"","suggestedAngles":[],"suggestedStyle":"luxury","appearance":"example"},"clientId":"01990000-0000-7000-8000-000000000001","direction":"example","scriptChecked":true}}}},"responses":{"201":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","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)$"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"},"data":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}},"title":{"type":"string"},"status":{"type":"string","enum":["draft","voicing","planning","planned","storyboarding","storyboarded","rendering","mixing","ready","failed"],"description":"planned and storyboarded wait for the user; failed keeps failedStage"},"stage":{"anyOf":[{"type":"string","enum":["voice","plan","storyboard","render","poll","mix"]},{"type":"null"}]},"progress":{"type":"number"},"error":{"description":"VOICE_FAILED, TOO_LONG, PLAN_FAILED, STORYBOARD_FAILED, SCENE_FAILED, RENDER_FAILED","type":["string","null"]},"failedStage":{"anyOf":[{"type":"string","enum":["voice","plan","storyboard","render","poll","mix"]},{"type":"null"}]},"script":{"type":"string"},"voiceId":{"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)$"},"dialect":{"type":"string"},"productModelId":{"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)$"},"tier":{"type":"string"},"aspectRatio":{"type":"string","enum":["9:16","16:9","1:1"]},"resolution":{"type":"string","enum":["720p","1080p","4k"]},"captions":{"type":"object","properties":{"enabled":{"default":true,"type":"boolean"},"style":{"default":"clean","type":"string","enum":["clean","bold","karaoke"]},"position":{"default":"bottom","type":"string","enum":["bottom","center"]}}},"music":{"type":"object","properties":{"enabled":{"type":"boolean"},"prompt":{"type":["string","null"]}},"required":["enabled","prompt"]},"imageUploadId":{"anyOf":[{"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)$"},{"type":"null"}]},"imageUploadIds":{"type":"array","items":{"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)$"}},"productStyle":{"anyOf":[{"type":"object","properties":{"id":{"type":"string","enum":["luxury","flash-sale","everyday","features","gift"],"description":"Ad style preset"},"season":{"type":"string","enum":["ramadan","eid","white-friday"],"description":"Seasonal variant of the gift style"}},"required":["id"]},{"type":"null"}]},"product":{"anyOf":[{"type":"object","properties":{"productName":{"type":"string","minLength":1,"maxLength":120},"category":{"default":"","type":"string","maxLength":120},"keyFeatures":{"default":[],"maxItems":8,"type":"array","items":{"type":"string","minLength":1,"maxLength":200}},"audience":{"default":"","type":"string","maxLength":300},"suggestedAngles":{"default":[],"maxItems":3,"type":"array","items":{"type":"string","maxLength":200}},"suggestedStyle":{"description":"The style the model suggests","type":"string","enum":["luxury","flash-sale","everyday","features","gift"]},"appearance":{"description":"English description of how the product looks (keeps it identical in the scene prompts)","type":"string","maxLength":600}},"required":["productName"]},{"type":"null"}]},"clientId":{"anyOf":[{"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)$"},{"type":"null"}]},"direction":{"description":"Visual direction given with the script (never spoken)","type":["string","null"]},"scenes":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"start":{"type":"number"},"end":{"type":"number"},"text":{"type":"string","description":"The words spoken in this scene"},"prompt":{"type":"string","description":"English visual prompt sent to the video model"},"status":{"type":"string","enum":["pending","queued","rendering","ready","failed"]},"frameUrl":{"description":"Storyboard still (the product photo for a scene that opens on one)","type":"string"},"imageIndex":{"description":"Index in imageUploadIds of the product photo this scene opens on","anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"imageUploadId":{"description":"The photo the person uploaded for this scene (PATCH scenes[].imageUploadId): the clip opens on it and no storyboard still is charged","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)$"},"clipUrl":{"description":"Rendered clip (no audio)","type":"string"},"error":{"description":"RENDER_FAILED, RENDER_TIMEOUT, SCENE_REJECTED","type":"string"},"renderSeconds":{"description":"Seconds the model renders for this scene","type":"number"}},"required":["id","start","end","text","prompt","status"]}},"duration":{"type":"number","description":"Seconds of voice-over (0 until voiced)"},"voiceUrl":{"type":["string","null"]},"words":{"description":"Recognised words of the voice-over with their times (full view, once voiced)","type":"array","items":{"type":"object","properties":{"word":{"type":"string"},"start":{"type":"number"},"end":{"type":"number"}},"required":["word","start","end"]}},"creditsReserved":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"creditsCharged":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"renderGenerationId":{"anyOf":[{"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)$"},{"type":"null"}]},"renderedAt":{"type":["string","null"]},"storyboard":{"type":"boolean","description":"Some scene has a storyboard still"},"output":{"type":"object","properties":{"videoUrl":{"type":["string","null"]},"downloadUrl":{"type":["string","null"]},"thumbnailUrl":{"type":["string","null"]},"watermarked":{"type":"boolean"},"generationId":{"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":"The render in the Library"},"duration":{"type":"number"}},"required":["videoUrl","downloadUrl","thumbnailUrl","watermarked","generationId","duration"]}},"required":["id","createdAt","updatedAt","title","status","stage","progress","error","failedStage","script","voiceId","dialect","productModelId","tier","aspectRatio","resolution","captions","music","imageUploadId","clientId","scenes","duration","voiceUrl","creditsReserved","creditsCharged","renderGenerationId","renderedAt","storyboard"],"additionalProperties":{}},"example":{"id":"01990000-0000-7000-8000-000000000001","createdAt":"2026-09-19T12:00:00.000Z","updatedAt":"2026-09-19T12:00:00.000Z","data":{},"title":"example","status":"draft","stage":"voice","progress":1,"error":"example","failedStage":"voice","script":"example","voiceId":"01990000-0000-7000-8000-000000000001","dialect":"ar-SA","productModelId":"01990000-0000-7000-8000-000000000001","tier":"example","aspectRatio":"9:16","resolution":"720p","captions":{"enabled":true,"style":"clean","position":"bottom"},"music":{"enabled":true,"prompt":"مرحباً بك في فوكلا."},"imageUploadId":"01990000-0000-7000-8000-000000000001","imageUploadIds":["01990000-0000-7000-8000-000000000001"],"productStyle":{"id":"luxury","season":"ramadan"},"product":{"productName":"example","category":"","keyFeatures":[],"audience":"","suggestedAngles":[],"suggestedStyle":"luxury","appearance":"example"},"clientId":"01990000-0000-7000-8000-000000000001","direction":"example","scenes":[{"id":"example","start":1,"end":1,"text":"مرحباً بك في فوكلا.","prompt":"مرحباً بك في فوكلا.","status":"pending","frameUrl":"http://localhost:4000/example","imageIndex":-9007199254740991,"imageUploadId":"01990000-0000-7000-8000-000000000001","clipUrl":"http://localhost:4000/example","error":"example","renderSeconds":1}],"duration":1,"voiceUrl":"http://localhost:4000/example","words":[{"word":"example","start":1,"end":1}],"creditsReserved":-9007199254740991,"creditsCharged":-9007199254740991,"renderGenerationId":"01990000-0000-7000-8000-000000000001","renderedAt":"2026-09-19T12:00:00.000Z","storyboard":true,"output":{"videoUrl":"http://localhost:4000/example","downloadUrl":"http://localhost:4000/example","thumbnailUrl":"http://localhost:4000/example","watermarked":true,"generationId":"01990000-0000-7000-8000-000000000001","duration":1}}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/video/projects","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/video/projects","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/video/projects","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/video/projects","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/video/projects","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/video/projects","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/video/projects","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/video/projects","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/video/projects","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/video/projects","traceId":"request-id"}}}}}}},"/v1/video/projects/{id}":{"get":{"operationId":"getVideoProject","tags":["Video"],"summary":"get Video Project","description":"Requires workspace role viewer or above. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","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)$"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"},"data":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}},"title":{"type":"string"},"status":{"type":"string","enum":["draft","voicing","planning","planned","storyboarding","storyboarded","rendering","mixing","ready","failed"],"description":"planned and storyboarded wait for the user; failed keeps failedStage"},"stage":{"anyOf":[{"type":"string","enum":["voice","plan","storyboard","render","poll","mix"]},{"type":"null"}]},"progress":{"type":"number"},"error":{"description":"VOICE_FAILED, TOO_LONG, PLAN_FAILED, STORYBOARD_FAILED, SCENE_FAILED, RENDER_FAILED","type":["string","null"]},"failedStage":{"anyOf":[{"type":"string","enum":["voice","plan","storyboard","render","poll","mix"]},{"type":"null"}]},"script":{"type":"string"},"voiceId":{"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)$"},"dialect":{"type":"string"},"productModelId":{"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)$"},"tier":{"type":"string"},"aspectRatio":{"type":"string","enum":["9:16","16:9","1:1"]},"resolution":{"type":"string","enum":["720p","1080p","4k"]},"captions":{"type":"object","properties":{"enabled":{"default":true,"type":"boolean"},"style":{"default":"clean","type":"string","enum":["clean","bold","karaoke"]},"position":{"default":"bottom","type":"string","enum":["bottom","center"]}}},"music":{"type":"object","properties":{"enabled":{"type":"boolean"},"prompt":{"type":["string","null"]}},"required":["enabled","prompt"]},"imageUploadId":{"anyOf":[{"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)$"},{"type":"null"}]},"imageUploadIds":{"type":"array","items":{"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)$"}},"productStyle":{"anyOf":[{"type":"object","properties":{"id":{"type":"string","enum":["luxury","flash-sale","everyday","features","gift"],"description":"Ad style preset"},"season":{"type":"string","enum":["ramadan","eid","white-friday"],"description":"Seasonal variant of the gift style"}},"required":["id"]},{"type":"null"}]},"product":{"anyOf":[{"type":"object","properties":{"productName":{"type":"string","minLength":1,"maxLength":120},"category":{"default":"","type":"string","maxLength":120},"keyFeatures":{"default":[],"maxItems":8,"type":"array","items":{"type":"string","minLength":1,"maxLength":200}},"audience":{"default":"","type":"string","maxLength":300},"suggestedAngles":{"default":[],"maxItems":3,"type":"array","items":{"type":"string","maxLength":200}},"suggestedStyle":{"description":"The style the model suggests","type":"string","enum":["luxury","flash-sale","everyday","features","gift"]},"appearance":{"description":"English description of how the product looks (keeps it identical in the scene prompts)","type":"string","maxLength":600}},"required":["productName"]},{"type":"null"}]},"clientId":{"anyOf":[{"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)$"},{"type":"null"}]},"direction":{"description":"Visual direction given with the script (never spoken)","type":["string","null"]},"scenes":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"start":{"type":"number"},"end":{"type":"number"},"text":{"type":"string","description":"The words spoken in this scene"},"prompt":{"type":"string","description":"English visual prompt sent to the video model"},"status":{"type":"string","enum":["pending","queued","rendering","ready","failed"]},"frameUrl":{"description":"Storyboard still (the product photo for a scene that opens on one)","type":"string"},"imageIndex":{"description":"Index in imageUploadIds of the product photo this scene opens on","anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"imageUploadId":{"description":"The photo the person uploaded for this scene (PATCH scenes[].imageUploadId): the clip opens on it and no storyboard still is charged","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)$"},"clipUrl":{"description":"Rendered clip (no audio)","type":"string"},"error":{"description":"RENDER_FAILED, RENDER_TIMEOUT, SCENE_REJECTED","type":"string"},"renderSeconds":{"description":"Seconds the model renders for this scene","type":"number"}},"required":["id","start","end","text","prompt","status"]}},"duration":{"type":"number","description":"Seconds of voice-over (0 until voiced)"},"voiceUrl":{"type":["string","null"]},"words":{"description":"Recognised words of the voice-over with their times (full view, once voiced)","type":"array","items":{"type":"object","properties":{"word":{"type":"string"},"start":{"type":"number"},"end":{"type":"number"}},"required":["word","start","end"]}},"creditsReserved":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"creditsCharged":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"renderGenerationId":{"anyOf":[{"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)$"},{"type":"null"}]},"renderedAt":{"type":["string","null"]},"storyboard":{"type":"boolean","description":"Some scene has a storyboard still"},"output":{"type":"object","properties":{"videoUrl":{"type":["string","null"]},"downloadUrl":{"type":["string","null"]},"thumbnailUrl":{"type":["string","null"]},"watermarked":{"type":"boolean"},"generationId":{"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":"The render in the Library"},"duration":{"type":"number"}},"required":["videoUrl","downloadUrl","thumbnailUrl","watermarked","generationId","duration"]}},"required":["id","createdAt","updatedAt","title","status","stage","progress","error","failedStage","script","voiceId","dialect","productModelId","tier","aspectRatio","resolution","captions","music","imageUploadId","clientId","scenes","duration","voiceUrl","creditsReserved","creditsCharged","renderGenerationId","renderedAt","storyboard"],"additionalProperties":{}},"example":{"id":"01990000-0000-7000-8000-000000000001","createdAt":"2026-09-19T12:00:00.000Z","updatedAt":"2026-09-19T12:00:00.000Z","data":{},"title":"example","status":"draft","stage":"voice","progress":1,"error":"example","failedStage":"voice","script":"example","voiceId":"01990000-0000-7000-8000-000000000001","dialect":"ar-SA","productModelId":"01990000-0000-7000-8000-000000000001","tier":"example","aspectRatio":"9:16","resolution":"720p","captions":{"enabled":true,"style":"clean","position":"bottom"},"music":{"enabled":true,"prompt":"مرحباً بك في فوكلا."},"imageUploadId":"01990000-0000-7000-8000-000000000001","imageUploadIds":["01990000-0000-7000-8000-000000000001"],"productStyle":{"id":"luxury","season":"ramadan"},"product":{"productName":"example","category":"","keyFeatures":[],"audience":"","suggestedAngles":[],"suggestedStyle":"luxury","appearance":"example"},"clientId":"01990000-0000-7000-8000-000000000001","direction":"example","scenes":[{"id":"example","start":1,"end":1,"text":"مرحباً بك في فوكلا.","prompt":"مرحباً بك في فوكلا.","status":"pending","frameUrl":"http://localhost:4000/example","imageIndex":-9007199254740991,"imageUploadId":"01990000-0000-7000-8000-000000000001","clipUrl":"http://localhost:4000/example","error":"example","renderSeconds":1}],"duration":1,"voiceUrl":"http://localhost:4000/example","words":[{"word":"example","start":1,"end":1}],"creditsReserved":-9007199254740991,"creditsCharged":-9007199254740991,"renderGenerationId":"01990000-0000-7000-8000-000000000001","renderedAt":"2026-09-19T12:00:00.000Z","storyboard":true,"output":{"videoUrl":"http://localhost:4000/example","downloadUrl":"http://localhost:4000/example","thumbnailUrl":"http://localhost:4000/example","watermarked":true,"generationId":"01990000-0000-7000-8000-000000000001","duration":1}}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/video/projects/{id}","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/video/projects/{id}","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/video/projects/{id}","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/video/projects/{id}","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/video/projects/{id}","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/video/projects/{id}","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/video/projects/{id}","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/video/projects/{id}","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/video/projects/{id}","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/video/projects/{id}","traceId":"request-id"}}}}}},"patch":{"operationId":"updateVideoProject","tags":["Video"],"summary":"Rename; while planned or storyboarded, edit scene prompts (a new prompt drops that scene AI storyboard still) or set / remove a scene own photo (imageUploadId, entitlement videoImageToVideo)","description":"Requires workspace role editor or above. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"X-CSRF-Token","in":"header","required":false,"description":"Required for cookie-authenticated mutations; returned by sign-in/sign-up.","schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"title":{"type":"string","minLength":1,"maxLength":120},"scenes":{"maxItems":200,"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"prompt":{"type":"string","minLength":3,"maxLength":2000},"imageUploadId":{"description":"The photo the person uploaded for this scene (a validated image upload; entitlement videoImageToVideo): it opens the clip (image to video), shows as the scene still and replaces any storyboard still, which is then neither made nor charged. null removes it","anyOf":[{"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)$"},{"type":"null"}]}},"required":["id"]}}}},"example":{"title":"example","scenes":[{"id":"example","prompt":"مرحباً بك في فوكلا.","imageUploadId":"01990000-0000-7000-8000-000000000001"}]}}}},"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","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)$"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"},"data":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}},"title":{"type":"string"},"status":{"type":"string","enum":["draft","voicing","planning","planned","storyboarding","storyboarded","rendering","mixing","ready","failed"],"description":"planned and storyboarded wait for the user; failed keeps failedStage"},"stage":{"anyOf":[{"type":"string","enum":["voice","plan","storyboard","render","poll","mix"]},{"type":"null"}]},"progress":{"type":"number"},"error":{"description":"VOICE_FAILED, TOO_LONG, PLAN_FAILED, STORYBOARD_FAILED, SCENE_FAILED, RENDER_FAILED","type":["string","null"]},"failedStage":{"anyOf":[{"type":"string","enum":["voice","plan","storyboard","render","poll","mix"]},{"type":"null"}]},"script":{"type":"string"},"voiceId":{"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)$"},"dialect":{"type":"string"},"productModelId":{"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)$"},"tier":{"type":"string"},"aspectRatio":{"type":"string","enum":["9:16","16:9","1:1"]},"resolution":{"type":"string","enum":["720p","1080p","4k"]},"captions":{"type":"object","properties":{"enabled":{"default":true,"type":"boolean"},"style":{"default":"clean","type":"string","enum":["clean","bold","karaoke"]},"position":{"default":"bottom","type":"string","enum":["bottom","center"]}}},"music":{"type":"object","properties":{"enabled":{"type":"boolean"},"prompt":{"type":["string","null"]}},"required":["enabled","prompt"]},"imageUploadId":{"anyOf":[{"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)$"},{"type":"null"}]},"imageUploadIds":{"type":"array","items":{"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)$"}},"productStyle":{"anyOf":[{"type":"object","properties":{"id":{"type":"string","enum":["luxury","flash-sale","everyday","features","gift"],"description":"Ad style preset"},"season":{"type":"string","enum":["ramadan","eid","white-friday"],"description":"Seasonal variant of the gift style"}},"required":["id"]},{"type":"null"}]},"product":{"anyOf":[{"type":"object","properties":{"productName":{"type":"string","minLength":1,"maxLength":120},"category":{"default":"","type":"string","maxLength":120},"keyFeatures":{"default":[],"maxItems":8,"type":"array","items":{"type":"string","minLength":1,"maxLength":200}},"audience":{"default":"","type":"string","maxLength":300},"suggestedAngles":{"default":[],"maxItems":3,"type":"array","items":{"type":"string","maxLength":200}},"suggestedStyle":{"description":"The style the model suggests","type":"string","enum":["luxury","flash-sale","everyday","features","gift"]},"appearance":{"description":"English description of how the product looks (keeps it identical in the scene prompts)","type":"string","maxLength":600}},"required":["productName"]},{"type":"null"}]},"clientId":{"anyOf":[{"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)$"},{"type":"null"}]},"direction":{"description":"Visual direction given with the script (never spoken)","type":["string","null"]},"scenes":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"start":{"type":"number"},"end":{"type":"number"},"text":{"type":"string","description":"The words spoken in this scene"},"prompt":{"type":"string","description":"English visual prompt sent to the video model"},"status":{"type":"string","enum":["pending","queued","rendering","ready","failed"]},"frameUrl":{"description":"Storyboard still (the product photo for a scene that opens on one)","type":"string"},"imageIndex":{"description":"Index in imageUploadIds of the product photo this scene opens on","anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"imageUploadId":{"description":"The photo the person uploaded for this scene (PATCH scenes[].imageUploadId): the clip opens on it and no storyboard still is charged","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)$"},"clipUrl":{"description":"Rendered clip (no audio)","type":"string"},"error":{"description":"RENDER_FAILED, RENDER_TIMEOUT, SCENE_REJECTED","type":"string"},"renderSeconds":{"description":"Seconds the model renders for this scene","type":"number"}},"required":["id","start","end","text","prompt","status"]}},"duration":{"type":"number","description":"Seconds of voice-over (0 until voiced)"},"voiceUrl":{"type":["string","null"]},"words":{"description":"Recognised words of the voice-over with their times (full view, once voiced)","type":"array","items":{"type":"object","properties":{"word":{"type":"string"},"start":{"type":"number"},"end":{"type":"number"}},"required":["word","start","end"]}},"creditsReserved":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"creditsCharged":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"renderGenerationId":{"anyOf":[{"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)$"},{"type":"null"}]},"renderedAt":{"type":["string","null"]},"storyboard":{"type":"boolean","description":"Some scene has a storyboard still"},"output":{"type":"object","properties":{"videoUrl":{"type":["string","null"]},"downloadUrl":{"type":["string","null"]},"thumbnailUrl":{"type":["string","null"]},"watermarked":{"type":"boolean"},"generationId":{"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":"The render in the Library"},"duration":{"type":"number"}},"required":["videoUrl","downloadUrl","thumbnailUrl","watermarked","generationId","duration"]}},"required":["id","createdAt","updatedAt","title","status","stage","progress","error","failedStage","script","voiceId","dialect","productModelId","tier","aspectRatio","resolution","captions","music","imageUploadId","clientId","scenes","duration","voiceUrl","creditsReserved","creditsCharged","renderGenerationId","renderedAt","storyboard"],"additionalProperties":{}},"example":{"id":"01990000-0000-7000-8000-000000000001","createdAt":"2026-09-19T12:00:00.000Z","updatedAt":"2026-09-19T12:00:00.000Z","data":{},"title":"example","status":"draft","stage":"voice","progress":1,"error":"example","failedStage":"voice","script":"example","voiceId":"01990000-0000-7000-8000-000000000001","dialect":"ar-SA","productModelId":"01990000-0000-7000-8000-000000000001","tier":"example","aspectRatio":"9:16","resolution":"720p","captions":{"enabled":true,"style":"clean","position":"bottom"},"music":{"enabled":true,"prompt":"مرحباً بك في فوكلا."},"imageUploadId":"01990000-0000-7000-8000-000000000001","imageUploadIds":["01990000-0000-7000-8000-000000000001"],"productStyle":{"id":"luxury","season":"ramadan"},"product":{"productName":"example","category":"","keyFeatures":[],"audience":"","suggestedAngles":[],"suggestedStyle":"luxury","appearance":"example"},"clientId":"01990000-0000-7000-8000-000000000001","direction":"example","scenes":[{"id":"example","start":1,"end":1,"text":"مرحباً بك في فوكلا.","prompt":"مرحباً بك في فوكلا.","status":"pending","frameUrl":"http://localhost:4000/example","imageIndex":-9007199254740991,"imageUploadId":"01990000-0000-7000-8000-000000000001","clipUrl":"http://localhost:4000/example","error":"example","renderSeconds":1}],"duration":1,"voiceUrl":"http://localhost:4000/example","words":[{"word":"example","start":1,"end":1}],"creditsReserved":-9007199254740991,"creditsCharged":-9007199254740991,"renderGenerationId":"01990000-0000-7000-8000-000000000001","renderedAt":"2026-09-19T12:00:00.000Z","storyboard":true,"output":{"videoUrl":"http://localhost:4000/example","downloadUrl":"http://localhost:4000/example","thumbnailUrl":"http://localhost:4000/example","watermarked":true,"generationId":"01990000-0000-7000-8000-000000000001","duration":1}}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/video/projects/{id}","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/video/projects/{id}","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/video/projects/{id}","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/video/projects/{id}","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/video/projects/{id}","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/video/projects/{id}","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/video/projects/{id}","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/video/projects/{id}","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/video/projects/{id}","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/video/projects/{id}","traceId":"request-id"}}}}}},"delete":{"operationId":"deleteVideoProject","tags":["Video"],"summary":"Delete the project (a render in progress is cancelled and its credits released); finished renders stay in the Library","description":"Requires workspace role editor or above. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"X-CSRF-Token","in":"header","required":false,"description":"Required for cookie-authenticated mutations; returned by sign-in/sign-up.","schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"ok":{"type":"boolean"}},"required":["ok"]},"example":{"ok":true}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/video/projects/{id}","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/video/projects/{id}","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/video/projects/{id}","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/video/projects/{id}","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/video/projects/{id}","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/video/projects/{id}","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/video/projects/{id}","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/video/projects/{id}","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/video/projects/{id}","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/video/projects/{id}","traceId":"request-id"}}}}}}},"/v1/video/projects/{id}/storyboard":{"post":{"operationId":"storyboardVideoProject","tags":["Video"],"summary":"Make a still per scene for approval before rendering (entitlement videoStoryboard)","description":"Requires workspace role editor or above. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"X-CSRF-Token","in":"header","required":false,"description":"Required for cookie-authenticated mutations; returned by sign-in/sign-up.","schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"responses":{"202":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","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)$"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"},"data":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}},"title":{"type":"string"},"status":{"type":"string","enum":["draft","voicing","planning","planned","storyboarding","storyboarded","rendering","mixing","ready","failed"],"description":"planned and storyboarded wait for the user; failed keeps failedStage"},"stage":{"anyOf":[{"type":"string","enum":["voice","plan","storyboard","render","poll","mix"]},{"type":"null"}]},"progress":{"type":"number"},"error":{"description":"VOICE_FAILED, TOO_LONG, PLAN_FAILED, STORYBOARD_FAILED, SCENE_FAILED, RENDER_FAILED","type":["string","null"]},"failedStage":{"anyOf":[{"type":"string","enum":["voice","plan","storyboard","render","poll","mix"]},{"type":"null"}]},"script":{"type":"string"},"voiceId":{"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)$"},"dialect":{"type":"string"},"productModelId":{"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)$"},"tier":{"type":"string"},"aspectRatio":{"type":"string","enum":["9:16","16:9","1:1"]},"resolution":{"type":"string","enum":["720p","1080p","4k"]},"captions":{"type":"object","properties":{"enabled":{"default":true,"type":"boolean"},"style":{"default":"clean","type":"string","enum":["clean","bold","karaoke"]},"position":{"default":"bottom","type":"string","enum":["bottom","center"]}}},"music":{"type":"object","properties":{"enabled":{"type":"boolean"},"prompt":{"type":["string","null"]}},"required":["enabled","prompt"]},"imageUploadId":{"anyOf":[{"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)$"},{"type":"null"}]},"imageUploadIds":{"type":"array","items":{"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)$"}},"productStyle":{"anyOf":[{"type":"object","properties":{"id":{"type":"string","enum":["luxury","flash-sale","everyday","features","gift"],"description":"Ad style preset"},"season":{"type":"string","enum":["ramadan","eid","white-friday"],"description":"Seasonal variant of the gift style"}},"required":["id"]},{"type":"null"}]},"product":{"anyOf":[{"type":"object","properties":{"productName":{"type":"string","minLength":1,"maxLength":120},"category":{"default":"","type":"string","maxLength":120},"keyFeatures":{"default":[],"maxItems":8,"type":"array","items":{"type":"string","minLength":1,"maxLength":200}},"audience":{"default":"","type":"string","maxLength":300},"suggestedAngles":{"default":[],"maxItems":3,"type":"array","items":{"type":"string","maxLength":200}},"suggestedStyle":{"description":"The style the model suggests","type":"string","enum":["luxury","flash-sale","everyday","features","gift"]},"appearance":{"description":"English description of how the product looks (keeps it identical in the scene prompts)","type":"string","maxLength":600}},"required":["productName"]},{"type":"null"}]},"clientId":{"anyOf":[{"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)$"},{"type":"null"}]},"direction":{"description":"Visual direction given with the script (never spoken)","type":["string","null"]},"scenes":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"start":{"type":"number"},"end":{"type":"number"},"text":{"type":"string","description":"The words spoken in this scene"},"prompt":{"type":"string","description":"English visual prompt sent to the video model"},"status":{"type":"string","enum":["pending","queued","rendering","ready","failed"]},"frameUrl":{"description":"Storyboard still (the product photo for a scene that opens on one)","type":"string"},"imageIndex":{"description":"Index in imageUploadIds of the product photo this scene opens on","anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"imageUploadId":{"description":"The photo the person uploaded for this scene (PATCH scenes[].imageUploadId): the clip opens on it and no storyboard still is charged","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)$"},"clipUrl":{"description":"Rendered clip (no audio)","type":"string"},"error":{"description":"RENDER_FAILED, RENDER_TIMEOUT, SCENE_REJECTED","type":"string"},"renderSeconds":{"description":"Seconds the model renders for this scene","type":"number"}},"required":["id","start","end","text","prompt","status"]}},"duration":{"type":"number","description":"Seconds of voice-over (0 until voiced)"},"voiceUrl":{"type":["string","null"]},"words":{"description":"Recognised words of the voice-over with their times (full view, once voiced)","type":"array","items":{"type":"object","properties":{"word":{"type":"string"},"start":{"type":"number"},"end":{"type":"number"}},"required":["word","start","end"]}},"creditsReserved":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"creditsCharged":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"renderGenerationId":{"anyOf":[{"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)$"},{"type":"null"}]},"renderedAt":{"type":["string","null"]},"storyboard":{"type":"boolean","description":"Some scene has a storyboard still"},"output":{"type":"object","properties":{"videoUrl":{"type":["string","null"]},"downloadUrl":{"type":["string","null"]},"thumbnailUrl":{"type":["string","null"]},"watermarked":{"type":"boolean"},"generationId":{"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":"The render in the Library"},"duration":{"type":"number"}},"required":["videoUrl","downloadUrl","thumbnailUrl","watermarked","generationId","duration"]}},"required":["id","createdAt","updatedAt","title","status","stage","progress","error","failedStage","script","voiceId","dialect","productModelId","tier","aspectRatio","resolution","captions","music","imageUploadId","clientId","scenes","duration","voiceUrl","creditsReserved","creditsCharged","renderGenerationId","renderedAt","storyboard"],"additionalProperties":{}},"example":{"id":"01990000-0000-7000-8000-000000000001","createdAt":"2026-09-19T12:00:00.000Z","updatedAt":"2026-09-19T12:00:00.000Z","data":{},"title":"example","status":"draft","stage":"voice","progress":1,"error":"example","failedStage":"voice","script":"example","voiceId":"01990000-0000-7000-8000-000000000001","dialect":"ar-SA","productModelId":"01990000-0000-7000-8000-000000000001","tier":"example","aspectRatio":"9:16","resolution":"720p","captions":{"enabled":true,"style":"clean","position":"bottom"},"music":{"enabled":true,"prompt":"مرحباً بك في فوكلا."},"imageUploadId":"01990000-0000-7000-8000-000000000001","imageUploadIds":["01990000-0000-7000-8000-000000000001"],"productStyle":{"id":"luxury","season":"ramadan"},"product":{"productName":"example","category":"","keyFeatures":[],"audience":"","suggestedAngles":[],"suggestedStyle":"luxury","appearance":"example"},"clientId":"01990000-0000-7000-8000-000000000001","direction":"example","scenes":[{"id":"example","start":1,"end":1,"text":"مرحباً بك في فوكلا.","prompt":"مرحباً بك في فوكلا.","status":"pending","frameUrl":"http://localhost:4000/example","imageIndex":-9007199254740991,"imageUploadId":"01990000-0000-7000-8000-000000000001","clipUrl":"http://localhost:4000/example","error":"example","renderSeconds":1}],"duration":1,"voiceUrl":"http://localhost:4000/example","words":[{"word":"example","start":1,"end":1}],"creditsReserved":-9007199254740991,"creditsCharged":-9007199254740991,"renderGenerationId":"01990000-0000-7000-8000-000000000001","renderedAt":"2026-09-19T12:00:00.000Z","storyboard":true,"output":{"videoUrl":"http://localhost:4000/example","downloadUrl":"http://localhost:4000/example","thumbnailUrl":"http://localhost:4000/example","watermarked":true,"generationId":"01990000-0000-7000-8000-000000000001","duration":1}}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/video/projects/{id}/storyboard","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/video/projects/{id}/storyboard","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/video/projects/{id}/storyboard","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/video/projects/{id}/storyboard","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/video/projects/{id}/storyboard","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/video/projects/{id}/storyboard","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/video/projects/{id}/storyboard","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/video/projects/{id}/storyboard","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/video/projects/{id}/storyboard","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/video/projects/{id}/storyboard","traceId":"request-id"}}}}}}},"/v1/video/projects/{id}/render":{"post":{"operationId":"renderVideoProject","tags":["Video"],"summary":"Reserve credits and render every scene, then mix voice, music and captions into the MP4. Checks seconds left this month, renders at once and the plan limits","description":"Requires workspace role editor or above. Retry with the same Idempotency-Key and identical body. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"Idempotency-Key","in":"header","required":true,"schema":{"type":"string","maxLength":200},"example":"request-2026-001"},{"name":"X-CSRF-Token","in":"header","required":false,"description":"Required for cookie-authenticated mutations; returned by sign-in/sign-up.","schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"responses":{"202":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","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)$"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"},"data":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}},"title":{"type":"string"},"status":{"type":"string","enum":["draft","voicing","planning","planned","storyboarding","storyboarded","rendering","mixing","ready","failed"],"description":"planned and storyboarded wait for the user; failed keeps failedStage"},"stage":{"anyOf":[{"type":"string","enum":["voice","plan","storyboard","render","poll","mix"]},{"type":"null"}]},"progress":{"type":"number"},"error":{"description":"VOICE_FAILED, TOO_LONG, PLAN_FAILED, STORYBOARD_FAILED, SCENE_FAILED, RENDER_FAILED","type":["string","null"]},"failedStage":{"anyOf":[{"type":"string","enum":["voice","plan","storyboard","render","poll","mix"]},{"type":"null"}]},"script":{"type":"string"},"voiceId":{"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)$"},"dialect":{"type":"string"},"productModelId":{"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)$"},"tier":{"type":"string"},"aspectRatio":{"type":"string","enum":["9:16","16:9","1:1"]},"resolution":{"type":"string","enum":["720p","1080p","4k"]},"captions":{"type":"object","properties":{"enabled":{"default":true,"type":"boolean"},"style":{"default":"clean","type":"string","enum":["clean","bold","karaoke"]},"position":{"default":"bottom","type":"string","enum":["bottom","center"]}}},"music":{"type":"object","properties":{"enabled":{"type":"boolean"},"prompt":{"type":["string","null"]}},"required":["enabled","prompt"]},"imageUploadId":{"anyOf":[{"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)$"},{"type":"null"}]},"imageUploadIds":{"type":"array","items":{"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)$"}},"productStyle":{"anyOf":[{"type":"object","properties":{"id":{"type":"string","enum":["luxury","flash-sale","everyday","features","gift"],"description":"Ad style preset"},"season":{"type":"string","enum":["ramadan","eid","white-friday"],"description":"Seasonal variant of the gift style"}},"required":["id"]},{"type":"null"}]},"product":{"anyOf":[{"type":"object","properties":{"productName":{"type":"string","minLength":1,"maxLength":120},"category":{"default":"","type":"string","maxLength":120},"keyFeatures":{"default":[],"maxItems":8,"type":"array","items":{"type":"string","minLength":1,"maxLength":200}},"audience":{"default":"","type":"string","maxLength":300},"suggestedAngles":{"default":[],"maxItems":3,"type":"array","items":{"type":"string","maxLength":200}},"suggestedStyle":{"description":"The style the model suggests","type":"string","enum":["luxury","flash-sale","everyday","features","gift"]},"appearance":{"description":"English description of how the product looks (keeps it identical in the scene prompts)","type":"string","maxLength":600}},"required":["productName"]},{"type":"null"}]},"clientId":{"anyOf":[{"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)$"},{"type":"null"}]},"direction":{"description":"Visual direction given with the script (never spoken)","type":["string","null"]},"scenes":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"start":{"type":"number"},"end":{"type":"number"},"text":{"type":"string","description":"The words spoken in this scene"},"prompt":{"type":"string","description":"English visual prompt sent to the video model"},"status":{"type":"string","enum":["pending","queued","rendering","ready","failed"]},"frameUrl":{"description":"Storyboard still (the product photo for a scene that opens on one)","type":"string"},"imageIndex":{"description":"Index in imageUploadIds of the product photo this scene opens on","anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"imageUploadId":{"description":"The photo the person uploaded for this scene (PATCH scenes[].imageUploadId): the clip opens on it and no storyboard still is charged","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)$"},"clipUrl":{"description":"Rendered clip (no audio)","type":"string"},"error":{"description":"RENDER_FAILED, RENDER_TIMEOUT, SCENE_REJECTED","type":"string"},"renderSeconds":{"description":"Seconds the model renders for this scene","type":"number"}},"required":["id","start","end","text","prompt","status"]}},"duration":{"type":"number","description":"Seconds of voice-over (0 until voiced)"},"voiceUrl":{"type":["string","null"]},"words":{"description":"Recognised words of the voice-over with their times (full view, once voiced)","type":"array","items":{"type":"object","properties":{"word":{"type":"string"},"start":{"type":"number"},"end":{"type":"number"}},"required":["word","start","end"]}},"creditsReserved":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"creditsCharged":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"renderGenerationId":{"anyOf":[{"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)$"},{"type":"null"}]},"renderedAt":{"type":["string","null"]},"storyboard":{"type":"boolean","description":"Some scene has a storyboard still"},"output":{"type":"object","properties":{"videoUrl":{"type":["string","null"]},"downloadUrl":{"type":["string","null"]},"thumbnailUrl":{"type":["string","null"]},"watermarked":{"type":"boolean"},"generationId":{"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":"The render in the Library"},"duration":{"type":"number"}},"required":["videoUrl","downloadUrl","thumbnailUrl","watermarked","generationId","duration"]}},"required":["id","createdAt","updatedAt","title","status","stage","progress","error","failedStage","script","voiceId","dialect","productModelId","tier","aspectRatio","resolution","captions","music","imageUploadId","clientId","scenes","duration","voiceUrl","creditsReserved","creditsCharged","renderGenerationId","renderedAt","storyboard"],"additionalProperties":{}},"example":{"id":"01990000-0000-7000-8000-000000000001","createdAt":"2026-09-19T12:00:00.000Z","updatedAt":"2026-09-19T12:00:00.000Z","data":{},"title":"example","status":"draft","stage":"voice","progress":1,"error":"example","failedStage":"voice","script":"example","voiceId":"01990000-0000-7000-8000-000000000001","dialect":"ar-SA","productModelId":"01990000-0000-7000-8000-000000000001","tier":"example","aspectRatio":"9:16","resolution":"720p","captions":{"enabled":true,"style":"clean","position":"bottom"},"music":{"enabled":true,"prompt":"مرحباً بك في فوكلا."},"imageUploadId":"01990000-0000-7000-8000-000000000001","imageUploadIds":["01990000-0000-7000-8000-000000000001"],"productStyle":{"id":"luxury","season":"ramadan"},"product":{"productName":"example","category":"","keyFeatures":[],"audience":"","suggestedAngles":[],"suggestedStyle":"luxury","appearance":"example"},"clientId":"01990000-0000-7000-8000-000000000001","direction":"example","scenes":[{"id":"example","start":1,"end":1,"text":"مرحباً بك في فوكلا.","prompt":"مرحباً بك في فوكلا.","status":"pending","frameUrl":"http://localhost:4000/example","imageIndex":-9007199254740991,"imageUploadId":"01990000-0000-7000-8000-000000000001","clipUrl":"http://localhost:4000/example","error":"example","renderSeconds":1}],"duration":1,"voiceUrl":"http://localhost:4000/example","words":[{"word":"example","start":1,"end":1}],"creditsReserved":-9007199254740991,"creditsCharged":-9007199254740991,"renderGenerationId":"01990000-0000-7000-8000-000000000001","renderedAt":"2026-09-19T12:00:00.000Z","storyboard":true,"output":{"videoUrl":"http://localhost:4000/example","downloadUrl":"http://localhost:4000/example","thumbnailUrl":"http://localhost:4000/example","watermarked":true,"generationId":"01990000-0000-7000-8000-000000000001","duration":1}}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/video/projects/{id}/render","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/video/projects/{id}/render","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/video/projects/{id}/render","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/video/projects/{id}/render","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/video/projects/{id}/render","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/video/projects/{id}/render","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/video/projects/{id}/render","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/video/projects/{id}/render","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/video/projects/{id}/render","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/video/projects/{id}/render","traceId":"request-id"}}}}}}},"/v1/video/projects/{id}/scenes/{sceneId}/regenerate":{"post":{"operationId":"regenerateVideoScene","tags":["Video"],"summary":"Render one scene again (optionally with a new prompt) and mix the video again","description":"Requires workspace role editor or above. Retry with the same Idempotency-Key and identical body. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"sceneId","in":"path","required":true,"schema":{"type":"string"}},{"name":"Idempotency-Key","in":"header","required":true,"schema":{"type":"string","maxLength":200},"example":"request-2026-001"},{"name":"X-CSRF-Token","in":"header","required":false,"description":"Required for cookie-authenticated mutations; returned by sign-in/sign-up.","schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"prompt":{"type":"string","minLength":3,"maxLength":2000}}},"example":{"prompt":"مرحباً بك في فوكلا."}}}},"responses":{"202":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","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)$"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"},"data":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}},"title":{"type":"string"},"status":{"type":"string","enum":["draft","voicing","planning","planned","storyboarding","storyboarded","rendering","mixing","ready","failed"],"description":"planned and storyboarded wait for the user; failed keeps failedStage"},"stage":{"anyOf":[{"type":"string","enum":["voice","plan","storyboard","render","poll","mix"]},{"type":"null"}]},"progress":{"type":"number"},"error":{"description":"VOICE_FAILED, TOO_LONG, PLAN_FAILED, STORYBOARD_FAILED, SCENE_FAILED, RENDER_FAILED","type":["string","null"]},"failedStage":{"anyOf":[{"type":"string","enum":["voice","plan","storyboard","render","poll","mix"]},{"type":"null"}]},"script":{"type":"string"},"voiceId":{"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)$"},"dialect":{"type":"string"},"productModelId":{"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)$"},"tier":{"type":"string"},"aspectRatio":{"type":"string","enum":["9:16","16:9","1:1"]},"resolution":{"type":"string","enum":["720p","1080p","4k"]},"captions":{"type":"object","properties":{"enabled":{"default":true,"type":"boolean"},"style":{"default":"clean","type":"string","enum":["clean","bold","karaoke"]},"position":{"default":"bottom","type":"string","enum":["bottom","center"]}}},"music":{"type":"object","properties":{"enabled":{"type":"boolean"},"prompt":{"type":["string","null"]}},"required":["enabled","prompt"]},"imageUploadId":{"anyOf":[{"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)$"},{"type":"null"}]},"imageUploadIds":{"type":"array","items":{"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)$"}},"productStyle":{"anyOf":[{"type":"object","properties":{"id":{"type":"string","enum":["luxury","flash-sale","everyday","features","gift"],"description":"Ad style preset"},"season":{"type":"string","enum":["ramadan","eid","white-friday"],"description":"Seasonal variant of the gift style"}},"required":["id"]},{"type":"null"}]},"product":{"anyOf":[{"type":"object","properties":{"productName":{"type":"string","minLength":1,"maxLength":120},"category":{"default":"","type":"string","maxLength":120},"keyFeatures":{"default":[],"maxItems":8,"type":"array","items":{"type":"string","minLength":1,"maxLength":200}},"audience":{"default":"","type":"string","maxLength":300},"suggestedAngles":{"default":[],"maxItems":3,"type":"array","items":{"type":"string","maxLength":200}},"suggestedStyle":{"description":"The style the model suggests","type":"string","enum":["luxury","flash-sale","everyday","features","gift"]},"appearance":{"description":"English description of how the product looks (keeps it identical in the scene prompts)","type":"string","maxLength":600}},"required":["productName"]},{"type":"null"}]},"clientId":{"anyOf":[{"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)$"},{"type":"null"}]},"direction":{"description":"Visual direction given with the script (never spoken)","type":["string","null"]},"scenes":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"start":{"type":"number"},"end":{"type":"number"},"text":{"type":"string","description":"The words spoken in this scene"},"prompt":{"type":"string","description":"English visual prompt sent to the video model"},"status":{"type":"string","enum":["pending","queued","rendering","ready","failed"]},"frameUrl":{"description":"Storyboard still (the product photo for a scene that opens on one)","type":"string"},"imageIndex":{"description":"Index in imageUploadIds of the product photo this scene opens on","anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"imageUploadId":{"description":"The photo the person uploaded for this scene (PATCH scenes[].imageUploadId): the clip opens on it and no storyboard still is charged","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)$"},"clipUrl":{"description":"Rendered clip (no audio)","type":"string"},"error":{"description":"RENDER_FAILED, RENDER_TIMEOUT, SCENE_REJECTED","type":"string"},"renderSeconds":{"description":"Seconds the model renders for this scene","type":"number"}},"required":["id","start","end","text","prompt","status"]}},"duration":{"type":"number","description":"Seconds of voice-over (0 until voiced)"},"voiceUrl":{"type":["string","null"]},"words":{"description":"Recognised words of the voice-over with their times (full view, once voiced)","type":"array","items":{"type":"object","properties":{"word":{"type":"string"},"start":{"type":"number"},"end":{"type":"number"}},"required":["word","start","end"]}},"creditsReserved":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"creditsCharged":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"renderGenerationId":{"anyOf":[{"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)$"},{"type":"null"}]},"renderedAt":{"type":["string","null"]},"storyboard":{"type":"boolean","description":"Some scene has a storyboard still"},"output":{"type":"object","properties":{"videoUrl":{"type":["string","null"]},"downloadUrl":{"type":["string","null"]},"thumbnailUrl":{"type":["string","null"]},"watermarked":{"type":"boolean"},"generationId":{"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":"The render in the Library"},"duration":{"type":"number"}},"required":["videoUrl","downloadUrl","thumbnailUrl","watermarked","generationId","duration"]}},"required":["id","createdAt","updatedAt","title","status","stage","progress","error","failedStage","script","voiceId","dialect","productModelId","tier","aspectRatio","resolution","captions","music","imageUploadId","clientId","scenes","duration","voiceUrl","creditsReserved","creditsCharged","renderGenerationId","renderedAt","storyboard"],"additionalProperties":{}},"example":{"id":"01990000-0000-7000-8000-000000000001","createdAt":"2026-09-19T12:00:00.000Z","updatedAt":"2026-09-19T12:00:00.000Z","data":{},"title":"example","status":"draft","stage":"voice","progress":1,"error":"example","failedStage":"voice","script":"example","voiceId":"01990000-0000-7000-8000-000000000001","dialect":"ar-SA","productModelId":"01990000-0000-7000-8000-000000000001","tier":"example","aspectRatio":"9:16","resolution":"720p","captions":{"enabled":true,"style":"clean","position":"bottom"},"music":{"enabled":true,"prompt":"مرحباً بك في فوكلا."},"imageUploadId":"01990000-0000-7000-8000-000000000001","imageUploadIds":["01990000-0000-7000-8000-000000000001"],"productStyle":{"id":"luxury","season":"ramadan"},"product":{"productName":"example","category":"","keyFeatures":[],"audience":"","suggestedAngles":[],"suggestedStyle":"luxury","appearance":"example"},"clientId":"01990000-0000-7000-8000-000000000001","direction":"example","scenes":[{"id":"example","start":1,"end":1,"text":"مرحباً بك في فوكلا.","prompt":"مرحباً بك في فوكلا.","status":"pending","frameUrl":"http://localhost:4000/example","imageIndex":-9007199254740991,"imageUploadId":"01990000-0000-7000-8000-000000000001","clipUrl":"http://localhost:4000/example","error":"example","renderSeconds":1}],"duration":1,"voiceUrl":"http://localhost:4000/example","words":[{"word":"example","start":1,"end":1}],"creditsReserved":-9007199254740991,"creditsCharged":-9007199254740991,"renderGenerationId":"01990000-0000-7000-8000-000000000001","renderedAt":"2026-09-19T12:00:00.000Z","storyboard":true,"output":{"videoUrl":"http://localhost:4000/example","downloadUrl":"http://localhost:4000/example","thumbnailUrl":"http://localhost:4000/example","watermarked":true,"generationId":"01990000-0000-7000-8000-000000000001","duration":1}}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/video/projects/{id}/scenes/{sceneId}/regenerate","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/video/projects/{id}/scenes/{sceneId}/regenerate","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/video/projects/{id}/scenes/{sceneId}/regenerate","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/video/projects/{id}/scenes/{sceneId}/regenerate","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/video/projects/{id}/scenes/{sceneId}/regenerate","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/video/projects/{id}/scenes/{sceneId}/regenerate","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/video/projects/{id}/scenes/{sceneId}/regenerate","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/video/projects/{id}/scenes/{sceneId}/regenerate","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/video/projects/{id}/scenes/{sceneId}/regenerate","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/video/projects/{id}/scenes/{sceneId}/regenerate","traceId":"request-id"}}}}}}},"/v1/video/projects/{id}/retry":{"post":{"operationId":"retryVideoProject","tags":["Video"],"summary":"Run the failed stage again: voicing, planning or the storyboard; failed scenes as a new render (their credits were refunded); the mix under its render","description":"Requires workspace role editor or above. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"X-CSRF-Token","in":"header","required":false,"description":"Required for cookie-authenticated mutations; returned by sign-in/sign-up.","schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","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)$"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"},"data":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}},"title":{"type":"string"},"status":{"type":"string","enum":["draft","voicing","planning","planned","storyboarding","storyboarded","rendering","mixing","ready","failed"],"description":"planned and storyboarded wait for the user; failed keeps failedStage"},"stage":{"anyOf":[{"type":"string","enum":["voice","plan","storyboard","render","poll","mix"]},{"type":"null"}]},"progress":{"type":"number"},"error":{"description":"VOICE_FAILED, TOO_LONG, PLAN_FAILED, STORYBOARD_FAILED, SCENE_FAILED, RENDER_FAILED","type":["string","null"]},"failedStage":{"anyOf":[{"type":"string","enum":["voice","plan","storyboard","render","poll","mix"]},{"type":"null"}]},"script":{"type":"string"},"voiceId":{"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)$"},"dialect":{"type":"string"},"productModelId":{"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)$"},"tier":{"type":"string"},"aspectRatio":{"type":"string","enum":["9:16","16:9","1:1"]},"resolution":{"type":"string","enum":["720p","1080p","4k"]},"captions":{"type":"object","properties":{"enabled":{"default":true,"type":"boolean"},"style":{"default":"clean","type":"string","enum":["clean","bold","karaoke"]},"position":{"default":"bottom","type":"string","enum":["bottom","center"]}}},"music":{"type":"object","properties":{"enabled":{"type":"boolean"},"prompt":{"type":["string","null"]}},"required":["enabled","prompt"]},"imageUploadId":{"anyOf":[{"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)$"},{"type":"null"}]},"imageUploadIds":{"type":"array","items":{"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)$"}},"productStyle":{"anyOf":[{"type":"object","properties":{"id":{"type":"string","enum":["luxury","flash-sale","everyday","features","gift"],"description":"Ad style preset"},"season":{"type":"string","enum":["ramadan","eid","white-friday"],"description":"Seasonal variant of the gift style"}},"required":["id"]},{"type":"null"}]},"product":{"anyOf":[{"type":"object","properties":{"productName":{"type":"string","minLength":1,"maxLength":120},"category":{"default":"","type":"string","maxLength":120},"keyFeatures":{"default":[],"maxItems":8,"type":"array","items":{"type":"string","minLength":1,"maxLength":200}},"audience":{"default":"","type":"string","maxLength":300},"suggestedAngles":{"default":[],"maxItems":3,"type":"array","items":{"type":"string","maxLength":200}},"suggestedStyle":{"description":"The style the model suggests","type":"string","enum":["luxury","flash-sale","everyday","features","gift"]},"appearance":{"description":"English description of how the product looks (keeps it identical in the scene prompts)","type":"string","maxLength":600}},"required":["productName"]},{"type":"null"}]},"clientId":{"anyOf":[{"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)$"},{"type":"null"}]},"direction":{"description":"Visual direction given with the script (never spoken)","type":["string","null"]},"scenes":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"start":{"type":"number"},"end":{"type":"number"},"text":{"type":"string","description":"The words spoken in this scene"},"prompt":{"type":"string","description":"English visual prompt sent to the video model"},"status":{"type":"string","enum":["pending","queued","rendering","ready","failed"]},"frameUrl":{"description":"Storyboard still (the product photo for a scene that opens on one)","type":"string"},"imageIndex":{"description":"Index in imageUploadIds of the product photo this scene opens on","anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"imageUploadId":{"description":"The photo the person uploaded for this scene (PATCH scenes[].imageUploadId): the clip opens on it and no storyboard still is charged","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)$"},"clipUrl":{"description":"Rendered clip (no audio)","type":"string"},"error":{"description":"RENDER_FAILED, RENDER_TIMEOUT, SCENE_REJECTED","type":"string"},"renderSeconds":{"description":"Seconds the model renders for this scene","type":"number"}},"required":["id","start","end","text","prompt","status"]}},"duration":{"type":"number","description":"Seconds of voice-over (0 until voiced)"},"voiceUrl":{"type":["string","null"]},"words":{"description":"Recognised words of the voice-over with their times (full view, once voiced)","type":"array","items":{"type":"object","properties":{"word":{"type":"string"},"start":{"type":"number"},"end":{"type":"number"}},"required":["word","start","end"]}},"creditsReserved":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"creditsCharged":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"renderGenerationId":{"anyOf":[{"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)$"},{"type":"null"}]},"renderedAt":{"type":["string","null"]},"storyboard":{"type":"boolean","description":"Some scene has a storyboard still"},"output":{"type":"object","properties":{"videoUrl":{"type":["string","null"]},"downloadUrl":{"type":["string","null"]},"thumbnailUrl":{"type":["string","null"]},"watermarked":{"type":"boolean"},"generationId":{"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":"The render in the Library"},"duration":{"type":"number"}},"required":["videoUrl","downloadUrl","thumbnailUrl","watermarked","generationId","duration"]}},"required":["id","createdAt","updatedAt","title","status","stage","progress","error","failedStage","script","voiceId","dialect","productModelId","tier","aspectRatio","resolution","captions","music","imageUploadId","clientId","scenes","duration","voiceUrl","creditsReserved","creditsCharged","renderGenerationId","renderedAt","storyboard"],"additionalProperties":{}},"example":{"id":"01990000-0000-7000-8000-000000000001","createdAt":"2026-09-19T12:00:00.000Z","updatedAt":"2026-09-19T12:00:00.000Z","data":{},"title":"example","status":"draft","stage":"voice","progress":1,"error":"example","failedStage":"voice","script":"example","voiceId":"01990000-0000-7000-8000-000000000001","dialect":"ar-SA","productModelId":"01990000-0000-7000-8000-000000000001","tier":"example","aspectRatio":"9:16","resolution":"720p","captions":{"enabled":true,"style":"clean","position":"bottom"},"music":{"enabled":true,"prompt":"مرحباً بك في فوكلا."},"imageUploadId":"01990000-0000-7000-8000-000000000001","imageUploadIds":["01990000-0000-7000-8000-000000000001"],"productStyle":{"id":"luxury","season":"ramadan"},"product":{"productName":"example","category":"","keyFeatures":[],"audience":"","suggestedAngles":[],"suggestedStyle":"luxury","appearance":"example"},"clientId":"01990000-0000-7000-8000-000000000001","direction":"example","scenes":[{"id":"example","start":1,"end":1,"text":"مرحباً بك في فوكلا.","prompt":"مرحباً بك في فوكلا.","status":"pending","frameUrl":"http://localhost:4000/example","imageIndex":-9007199254740991,"imageUploadId":"01990000-0000-7000-8000-000000000001","clipUrl":"http://localhost:4000/example","error":"example","renderSeconds":1}],"duration":1,"voiceUrl":"http://localhost:4000/example","words":[{"word":"example","start":1,"end":1}],"creditsReserved":-9007199254740991,"creditsCharged":-9007199254740991,"renderGenerationId":"01990000-0000-7000-8000-000000000001","renderedAt":"2026-09-19T12:00:00.000Z","storyboard":true,"output":{"videoUrl":"http://localhost:4000/example","downloadUrl":"http://localhost:4000/example","thumbnailUrl":"http://localhost:4000/example","watermarked":true,"generationId":"01990000-0000-7000-8000-000000000001","duration":1}}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/video/projects/{id}/retry","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/video/projects/{id}/retry","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/video/projects/{id}/retry","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/video/projects/{id}/retry","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/video/projects/{id}/retry","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/video/projects/{id}/retry","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/video/projects/{id}/retry","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/video/projects/{id}/retry","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/video/projects/{id}/retry","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/video/projects/{id}/retry","traceId":"request-id"}}}}}}},"/v1/video/quote":{"post":{"operationId":"quoteVideo","tags":["Video"],"summary":"Credits and seconds for a new video (from the script length) or for the next render of a project","description":"Requires workspace role editor or above. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"X-CSRF-Token","in":"header","required":false,"description":"Required for cookie-authenticated mutations; returned by sign-in/sign-up.","schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"title":{"type":"string","maxLength":120},"script":{"type":"string","minLength":1,"maxLength":6000,"description":"What the voice says; inline tags ([whisper], [pause 1s]) work as in text to speech"},"voiceId":{"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)$"},"dialect":{"description":"Dialect to speak in (e.g. ar-SA, ar-EG); default the voice dialect","type":"string","maxLength":20},"productModelId":{"description":"Speech model for the voice-over; default Vox Prime","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)$"},"params":{"type":"object","properties":{"speed":{"default":50,"type":"number","minimum":0,"maximum":100},"consistency":{"default":50,"type":"number","minimum":0,"maximum":100},"voiceMatch":{"default":75,"type":"number","minimum":0,"maximum":100},"expressiveness":{"default":50,"type":"number","minimum":0,"maximum":100},"clarity":{"default":75,"type":"number","minimum":0,"maximum":100},"energyMode":{"default":"normal","type":"string","enum":["normal","boost"]}}},"tier":{"type":"string","minLength":1,"maxLength":100,"description":"Video quality tier slug (vid-lite, vid-standard, vid-premium)"},"aspectRatio":{"type":"string","enum":["9:16","16:9","1:1"]},"resolution":{"type":"string","enum":["720p","1080p","4k"]},"captions":{"default":{"enabled":true,"style":"clean","position":"bottom"},"type":"object","properties":{"enabled":{"default":true,"type":"boolean"},"style":{"default":"clean","type":"string","enum":["clean","bold","karaoke"]},"position":{"default":"bottom","type":"string","enum":["bottom","center"]}}},"music":{"default":{"enabled":false},"type":"object","properties":{"enabled":{"default":false,"description":"Background music bed ducked under the voice (entitlement videoMusicBed)","type":"boolean"},"prompt":{"description":"Music style prompt: a musicStyles prompt from the options, or free text","type":"string","maxLength":300}}},"imageUploadId":{"description":"An image upload used as the first frame (entitlement videoImageToVideo)","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)$"},"imageUploadIds":{"description":"Product photos (entitlement videoImageToVideo): each scene opens on one of them, the first (hero) on the first scene; takes the place of imageUploadId","minItems":1,"maxItems":4,"type":"array","items":{"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)$"}},"productStyle":{"description":"Product video ad style: plans the scenes on its beats","type":"object","properties":{"id":{"type":"string","enum":["luxury","flash-sale","everyday","features","gift"],"description":"Ad style preset"},"season":{"type":"string","enum":["ramadan","eid","white-friday"],"description":"Seasonal variant of the gift style"}},"required":["id"]},"product":{"description":"Product facts (POST /v1/video/product/analyze) that keep scene prompts on the product","type":"object","properties":{"productName":{"type":"string","minLength":1,"maxLength":120},"category":{"default":"","type":"string","maxLength":120},"keyFeatures":{"default":[],"maxItems":8,"type":"array","items":{"type":"string","minLength":1,"maxLength":200}},"audience":{"default":"","type":"string","maxLength":300},"suggestedAngles":{"default":[],"maxItems":3,"type":"array","items":{"type":"string","maxLength":200}},"suggestedStyle":{"description":"The style the model suggests","type":"string","enum":["luxury","flash-sale","everyday","features","gift"]},"appearance":{"description":"English description of how the product looks (keeps it identical in the scene prompts)","type":"string","maxLength":600}},"required":["productName"]},"clientId":{"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)$"},"direction":{"description":"Visual direction for the scenes (style, characters, setting, action), e.g. what POST /v1/video/script-check separated from the script. Guides the scene planner; never spoken","type":"string","maxLength":2000},"scriptChecked":{"description":"The person saw Neo’s script check (POST /v1/video/script-check) and chose what the voice says. Without it the server runs the check itself: directions are kept out of the voice and guide the scenes, and a script with no words to speak is voiced with Neo’s suggested voice-over","type":"boolean"},"projectId":{"description":"Quote the next render of this project instead of a new script","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)$"}}},"example":{"title":"example","script":"example","voiceId":"01990000-0000-7000-8000-000000000001","dialect":"ar-SA","productModelId":"01990000-0000-7000-8000-000000000001","params":{"speed":50,"consistency":50,"voiceMatch":75,"expressiveness":50,"clarity":75,"energyMode":"normal"},"tier":"example","aspectRatio":"9:16","resolution":"720p","captions":{"enabled":true,"style":"clean","position":"bottom"},"music":{"enabled":false},"imageUploadId":"01990000-0000-7000-8000-000000000001","imageUploadIds":["01990000-0000-7000-8000-000000000001"],"productStyle":{"id":"luxury","season":"ramadan"},"product":{"productName":"example","category":"","keyFeatures":[],"audience":"","suggestedAngles":[],"suggestedStyle":"luxury","appearance":"example"},"clientId":"01990000-0000-7000-8000-000000000001","direction":"example","scriptChecked":true,"projectId":"01990000-0000-7000-8000-000000000001"}}}},"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"seconds":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Seconds of video (counted against the monthly allowance)"},"renderSeconds":{"type":"number","description":"Seconds the model renders (scenes snapped to supported lengths)"},"credits":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"estimated":{"description":"From the script length, before the voice exists","type":"boolean"},"breakdown":{"type":"object","properties":{"tts":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"music":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"storyboard":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"scenes":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"seconds":{"type":"number"},"renderSeconds":{"type":"number"},"credits":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}},"required":["id","seconds","renderSeconds","credits"]}}},"required":["tts","music","storyboard","scenes"]}},"required":["seconds","renderSeconds","credits","breakdown"]},"example":{"seconds":-9007199254740991,"renderSeconds":1,"credits":-9007199254740991,"estimated":true,"breakdown":{"tts":-9007199254740991,"music":-9007199254740991,"storyboard":-9007199254740991,"scenes":[{"id":"example","seconds":1,"renderSeconds":1,"credits":-9007199254740991}]}}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/video/quote","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/video/quote","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/video/quote","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/video/quote","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/video/quote","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/video/quote","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/video/quote","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/video/quote","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/video/quote","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/video/quote","traceId":"request-id"}}}}}}},"/v1/video/script-check":{"post":{"operationId":"checkVideoScript","tags":["Video"],"summary":"Before a video is voiced: Neo separates what the voice should say from visual directions (camera, style, the request itself) so a prompt is never read aloud. Free; Neo is asked only when the rules see directions, a few dozen fresh checks a day per person","description":"Requires workspace role editor or above. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"X-CSRF-Token","in":"header","required":false,"description":"Required for cookie-authenticated mutations; returned by sign-in/sign-up.","schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"script":{"type":"string","minLength":1,"maxLength":6000},"dialect":{"description":"Dialect the voice will speak (a suggested voice-over is written in it)","type":"string","maxLength":20},"uiLocale":{"description":"Language of the reason line","type":"string","enum":["ar","en"]}},"required":["script"]},"example":{"script":"example","dialect":"ar-SA","uiLocale":"ar"}}}},"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"verdict":{"type":"string","enum":["voiceover","mixed","description"],"description":"voiceover = all of it is meant to be spoken; mixed = spoken words inside directions; description = only directions"},"segments":{"type":"array","items":{"type":"object","properties":{"text":{"type":"string"},"kind":{"type":"string","enum":["say","direct"],"description":"say = words the voice speaks; direct = a visual direction (camera, style, action, the request itself), never spoken"}},"required":["text","kind"]},"description":"The script in order, every piece marked (empty when it is all voice-over)"},"voiceover":{"type":"string","description":"The words to speak, as written by the person"},"direction":{"type":"string","description":"Everything that is not spoken, for the scene planner"},"suggestedVoiceover":{"description":"A short voice-over by Neo in the dialect when the script has no words to speak","type":["string","null"]},"reason":{"description":"One short line on what Neo noticed, in uiLocale","type":["string","null"]},"signals":{"type":"array","items":{"type":"string"},"description":"What the fallback rules noticed: camera, style, quality, quoted, request, label, stage, scene, language"},"cartoon":{"type":"boolean","description":"An animated story told by characters (characters talking to each other, a kids’ story): the app offers the Cartoon studio, which gives every character its own voice"},"source":{"type":"string","enum":["rules","neo"]},"cached":{"type":"boolean"}},"required":["verdict","segments","voiceover","direction","suggestedVoiceover","reason","signals","cartoon","source","cached"]},"example":{"verdict":"voiceover","segments":[{"text":"مرحباً بك في فوكلا.","kind":"say"}],"voiceover":"example","direction":"example","suggestedVoiceover":"example","reason":"example","signals":["example"],"cartoon":true,"source":"rules","cached":true}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/video/script-check","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/video/script-check","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/video/script-check","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/video/script-check","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/video/script-check","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/video/script-check","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/video/script-check","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/video/script-check","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/video/script-check","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/video/script-check","traceId":"request-id"}}}}}}},"/v1/video/product/analyze":{"post":{"operationId":"analyzeProductVideo","tags":["Video"],"summary":"Look at 1-4 product photos (vision) and return the product facts in the given language: name, category, key features, audience, three ad angles, a suggested style and an English appearance line. Entitlement videoImageToVideo; free (no credits), limited per hour","description":"Requires workspace role editor or above. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"X-CSRF-Token","in":"header","required":false,"description":"Required for cookie-authenticated mutations; returned by sign-in/sign-up.","schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"uploadIds":{"minItems":1,"maxItems":4,"type":"array","items":{"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":"Validated image uploads; the first is the hero shot"},"locale":{"type":"string","minLength":2,"maxLength":20,"description":"Language to write the facts in (the interface language)"},"dialect":{"type":"string","maxLength":20}},"required":["uploadIds","locale"]},"example":{"uploadIds":["01990000-0000-7000-8000-000000000001"],"locale":"ar-SA","dialect":"ar-SA"}}}},"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"facts":{"type":"object","properties":{"productName":{"type":"string","minLength":1,"maxLength":120},"category":{"default":"","type":"string","maxLength":120},"keyFeatures":{"default":[],"maxItems":8,"type":"array","items":{"type":"string","minLength":1,"maxLength":200}},"audience":{"default":"","type":"string","maxLength":300},"suggestedAngles":{"default":[],"maxItems":3,"type":"array","items":{"type":"string","maxLength":200}},"suggestedStyle":{"description":"The style the model suggests","type":"string","enum":["luxury","flash-sale","everyday","features","gift"]},"appearance":{"description":"English description of how the product looks (keeps it identical in the scene prompts)","type":"string","maxLength":600}},"required":["productName"]},"uploadIds":{"type":"array","items":{"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)$"}}},"required":["facts","uploadIds"]},"example":{"facts":{"productName":"example","category":"","keyFeatures":[],"audience":"","suggestedAngles":[],"suggestedStyle":"luxury","appearance":"example"},"uploadIds":["01990000-0000-7000-8000-000000000001"]}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/video/product/analyze","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/video/product/analyze","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/video/product/analyze","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/video/product/analyze","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/video/product/analyze","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/video/product/analyze","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/video/product/analyze","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/video/product/analyze","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/video/product/analyze","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/video/product/analyze","traceId":"request-id"}}}}}}},"/v1/video/product/script":{"post":{"operationId":"writeProductVideoScript","tags":["Video"],"summary":"Write a spoken ad script in the dialect from the product facts, the ad style and the optional offer, sized to the target length. Entitlement videoImageToVideo (and videoMaxSecondsPerVideo); free (no credits), limited per hour","description":"Requires workspace role editor or above. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"X-CSRF-Token","in":"header","required":false,"description":"Required for cookie-authenticated mutations; returned by sign-in/sign-up.","schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"facts":{"type":"object","properties":{"productName":{"type":"string","minLength":1,"maxLength":120},"category":{"default":"","type":"string","maxLength":120},"keyFeatures":{"default":[],"maxItems":8,"type":"array","items":{"type":"string","minLength":1,"maxLength":200}},"audience":{"default":"","type":"string","maxLength":300},"suggestedAngles":{"default":[],"maxItems":3,"type":"array","items":{"type":"string","maxLength":200}},"suggestedStyle":{"description":"The style the model suggests","type":"string","enum":["luxury","flash-sale","everyday","features","gift"]},"appearance":{"description":"English description of how the product looks (keeps it identical in the scene prompts)","type":"string","maxLength":600}},"required":["productName"]},"angle":{"type":"string","maxLength":200},"style":{"type":"string","enum":["luxury","flash-sale","everyday","features","gift"],"description":"Ad style preset"},"season":{"type":"string","enum":["ramadan","eid","white-friday"],"description":"Seasonal variant of the gift style"},"dialect":{"type":"string","minLength":2,"maxLength":20},"durationSeconds":{"anyOf":[{"type":"number","const":6},{"type":"number","const":10},{"type":"number","const":15},{"type":"number","const":30}],"description":"Target length in seconds (at most the plan maximum)"},"offer":{"type":"object","properties":{"price":{"type":"string","maxLength":60},"discount":{"type":"string","maxLength":60},"storeName":{"type":"string","maxLength":80},"cta":{"description":"Call to action, e.g. \"order via the link in bio\"","type":"string","maxLength":120}}}},"required":["facts","style","dialect","durationSeconds"]},"example":{"facts":{"productName":"example","category":"","keyFeatures":[],"audience":"","suggestedAngles":[],"suggestedStyle":"luxury","appearance":"example"},"angle":"example","style":"luxury","season":"ramadan","dialect":"ar-SA","durationSeconds":6,"offer":{"price":"example","discount":"example","storeName":"example","cta":"example"}}}}},"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"title":{"type":"string"},"script":{"type":"string"},"estimatedSeconds":{"type":"number","description":"Spoken length estimate"},"targetSeconds":{"type":"number"},"maxWords":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}},"required":["title","script","estimatedSeconds","targetSeconds","maxWords"]},"example":{"title":"example","script":"example","estimatedSeconds":1,"targetSeconds":1,"maxWords":-9007199254740991}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/video/product/script","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/video/product/script","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/video/product/script","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/video/product/script","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/video/product/script","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/video/product/script","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/video/product/script","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/video/product/script","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/video/product/script","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/video/product/script","traceId":"request-id"}}}}}}},"/v1/webhooks/openrouter":{"post":{"operationId":"openrouterWebhook","tags":["Video"],"summary":"OpenRouter video job webhook: X-OpenRouter-Signature verified over the raw body, deliveries deduplicated by X-OpenRouter-Idempotency-Key","description":"Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false}],"security":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","propertyNames":{"type":"string"},"additionalProperties":{}},"example":{}}}},"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"ok":{"type":"boolean"}},"required":["ok"]},"example":{"ok":true}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/webhooks/openrouter","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/webhooks/openrouter","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/webhooks/openrouter","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/webhooks/openrouter","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/webhooks/openrouter","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/webhooks/openrouter","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/webhooks/openrouter","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/webhooks/openrouter","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/webhooks/openrouter","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/webhooks/openrouter","traceId":"request-id"}}}}}}},"/v1/cartoon/options":{"get":{"operationId":"getCartoonOptions","tags":["Cartoon"],"summary":"Whether the plan includes the Cartoon studio, its limits, seconds used this month, the video tiers it may use, the Cartoon voices and the pricing","description":"Requires workspace role viewer or above. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false}],"security":[{"session":[]},{"apiKey":[]}],"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"plan":{"type":"string"},"included":{"type":"boolean"},"available":{"type":"boolean","description":"A video tier the plan may use is served by a real provider"},"limits":{"type":"object","properties":{"cartoonStudio":{"default":false,"description":"Cartoon studio; refusals are 403 with errors[0].path = the entitlement key. Episodes render on the plan video tiers, aspect ratios, resolution and watermark","type":"boolean"},"cartoonSecondsPerMonth":{"default":0,"description":"Cartoon seconds a workspace may produce per calendar month (UTC); 0 = none","type":"integer","minimum":0,"maximum":1000000},"cartoonMaxSeconds":{"default":0,"description":"Longest episode (seconds)","type":"integer","minimum":0,"maximum":600},"cartoonCharacters":{"default":0,"description":"Characters per episode (the narrator is free)","type":"integer","minimum":0,"maximum":12},"cartoonSeries":{"default":false,"description":"Named series (Detective Conan, ThunderCats…); styles are open to every plan with the studio","type":"boolean"},"cartoonOpening":{"default":false,"description":"A sung opening (theme song with Arabic lyrics) before the episode","type":"boolean"},"cartoonStems":{"default":false,"description":"Download the five audio lanes (dialogue, effects, foley, ambience, music) as WAV stems","type":"boolean"},"cartoonProjects":{"default":0,"description":"Active (not deleted) cartoon projects a workspace may keep","type":"integer","minimum":0,"maximum":100000}}},"usedSeconds":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"remainingSeconds":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"tiers":{"type":"array","items":{"type":"object","properties":{"slug":{"type":"string"},"name":{"type":"object","properties":{"ar":{"type":"string","minLength":1},"en":{"type":"string","minLength":1}},"required":["ar","en"]},"creditsPerSecond":{"type":"number"},"creditsPerSecondByResolution":{"description":"Rates for resolutions that cost more than creditsPerSecond (e.g. 1080p: 350)","type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"number"}},"available":{"type":"boolean"}},"required":["slug","name","creditsPerSecond","available"]}},"lockedTiers":{"type":"array","items":{"type":"object","properties":{"slug":{"type":"string"},"name":{"type":"object","properties":{"ar":{"type":"string","minLength":1},"en":{"type":"string","minLength":1}},"required":["ar","en"]}},"required":["slug","name"]}},"aspectRatios":{"type":"array","items":{"type":"string","enum":["9:16","16:9","1:1"]}},"watermark":{"type":"boolean"},"sfxGeneration":{"type":"boolean","description":"A sound-effects model is configured (else the library and built-in sounds are used)"},"pricing":{"type":"object","properties":{"sheetCredits":{"type":"integer","minimum":0,"maximum":100000,"description":"Credits per character sheet a production includes (series cast with an admin picture are free)"},"stillCredits":{"type":"integer","minimum":0,"maximum":100000,"description":"Credits per storyboard still a production includes"},"sfxCredits":{"type":"integer","minimum":0,"maximum":100000,"description":"Credits per sound effect generated for the episode (library sounds are free)"},"scoreCredits":{"type":"integer","minimum":0,"maximum":100000,"description":"Credits for the music score of an episode"},"openingCredits":{"type":"integer","minimum":0,"maximum":100000,"description":"Credits for the sung opening"},"regenerationsPerProject":{"type":"integer","minimum":0,"maximum":1000,"description":"Free sheet and still regenerations a project may ask for before production"},"lipSyncPercent":{"default":60,"description":"Lip sync: talking shots cost this much more than the tier rate (percent of their animated seconds); refunded for a shot that falls back","type":"integer","minimum":0,"maximum":500}},"required":["sheetCredits","stillCredits","sfxCredits","scoreCredits","openingCredits","regenerationsPerProject"]},"voices":{"type":"array","items":{"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)$"},"name":{"type":"object","properties":{"ar":{"type":"string","minLength":1},"en":{"type":"string","minLength":1}},"required":["ar","en"]},"gender":{"type":"string"},"age":{"type":"string"},"dialect":{"type":"string"},"premium":{"type":"boolean"},"locked":{"type":"boolean"},"sampleUrl":{"type":["string","null"]},"description":{"anyOf":[{"type":"object","properties":{"ar":{"type":"string","minLength":1},"en":{"type":"string","minLength":1}},"required":["ar","en"]},{"type":"object","properties":{"ar":{"type":"string"},"en":{"type":"string"}},"required":["ar","en"]}]}},"required":["id","name","gender","age","dialect","premium","locked","sampleUrl","description"]}},"lengths":{"type":"array","items":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}},"resolution":{"description":"The resolution episodes render at on this plan (its rate is tiers[].creditsPerSecondByResolution[resolution] when listed)","type":"string"},"lipSync":{"description":"Talking shots are lip-synced (and cost pricing.lipSyncPercent more)","type":"boolean"}},"required":["plan","included","available","limits","usedSeconds","remainingSeconds","tiers","lockedTiers","aspectRatios","watermark","sfxGeneration","pricing","voices","lengths"]},"example":{"plan":"example","included":true,"available":true,"limits":{"cartoonStudio":false,"cartoonSecondsPerMonth":0,"cartoonMaxSeconds":0,"cartoonCharacters":0,"cartoonSeries":false,"cartoonOpening":false,"cartoonStems":false,"cartoonProjects":0},"usedSeconds":-9007199254740991,"remainingSeconds":-9007199254740991,"tiers":[{"slug":"example","name":{"ar":"مثال","en":"example"},"creditsPerSecond":1,"creditsPerSecondByResolution":{},"available":true}],"lockedTiers":[{"slug":"example","name":{"ar":"مثال","en":"example"}}],"aspectRatios":["9:16"],"watermark":true,"sfxGeneration":true,"pricing":{"sheetCredits":0,"stillCredits":0,"sfxCredits":0,"scoreCredits":0,"openingCredits":0,"regenerationsPerProject":0,"lipSyncPercent":60},"voices":[{"id":"01990000-0000-7000-8000-000000000001","name":{"ar":"مثال","en":"example"},"gender":"example","age":"example","dialect":"ar-SA","premium":true,"locked":true,"sampleUrl":"http://localhost:4000/example","description":{"ar":"مثال","en":"example"}}],"lengths":[-9007199254740991],"resolution":"example","lipSync":true}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/cartoon/options","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/cartoon/options","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/cartoon/options","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/cartoon/options","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/cartoon/options","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/cartoon/options","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/cartoon/options","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/cartoon/options","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/cartoon/options","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/cartoon/options","traceId":"request-id"}}}}}}},"/v1/cartoon/themes":{"get":{"operationId":"listCartoonThemes","tags":["Cartoon"],"summary":"Series and styles, in display order, each marked locked when the plan does not include it","description":"Requires workspace role viewer or above. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false}],"security":[{"session":[]},{"apiKey":[]}],"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"items":{"type":"array","items":{"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)$"},"slug":{"type":"string"},"kind":{"type":"string","enum":["series","style"]},"planet":{"anyOf":[{"type":"string","enum":["action","adventure","sports","comedy","zumurruda","science","bonbon","heroes"]},{"type":"null"}]},"name":{"type":"object","properties":{"ar":{"type":"string","minLength":1},"en":{"type":"string","minLength":1}},"required":["ar","en"]},"tagline":{"type":"object","properties":{"ar":{"type":"string","minLength":1},"en":{"type":"string","minLength":1}},"required":["ar","en"]},"colors":{"type":"object","properties":{"from":{"type":"string","pattern":"^#[0-9a-fA-F]{6}$"},"to":{"type":"string","pattern":"^#[0-9a-fA-F]{6}$"},"accent":{"type":"string","pattern":"^#[0-9a-fA-F]{6}$"}},"required":["from","to","accent"]},"emoji":{"type":"string"},"jingle":{"type":"string","enum":["mystery","heroic","sports","mecha","tearjerker","pirate","power","creature","slapstick","anime","retro","family","kawaii","storybook","kids","adventure"]},"coverUrl":{"type":["string","null"]},"sampleUrl":{"type":["string","null"]},"loopUrl":{"type":["string","null"]},"dialect":{"type":"string"},"narrator":{"type":"boolean"},"ideas":{"type":"array","items":{"type":"object","properties":{"ar":{"type":"string","minLength":1},"en":{"type":"string","minLength":1}},"required":["ar","en"]}},"cast":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":40,"pattern":"^[a-z0-9-]+$"},"name":{"type":"object","properties":{"ar":{"type":"string","minLength":1},"en":{"type":"string","minLength":1}},"required":["ar","en"]},"appearance":{"type":"string","minLength":1,"maxLength":600,"description":"English description the image model draws (hair, outfit, colours, build)"},"personality":{"default":"","type":"string","maxLength":300},"gender":{"type":"string","enum":["male","female"]},"age":{"type":"string","enum":["child","teen","adult","elder"]},"voiceId":{"default":null,"description":"Default voice (Cartoon category)","anyOf":[{"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)$"},{"type":"null"}]},"voiceFx":{"default":"none","type":"string","enum":["none","chibi","giant","robot","alien","radio","echo","monster"]},"imageUrl":{"type":["string","null"]}},"required":["id","name","appearance","gender","age","imageUrl"]}},"locked":{"type":"boolean","description":"The plan does not include this theme (series need cartoonSeries)"},"order":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}},"required":["id","slug","kind","planet","name","tagline","colors","emoji","jingle","coverUrl","sampleUrl","loopUrl","dialect","narrator","ideas","cast","locked","order"]}}},"required":["items"]},"example":{"items":[{"id":"01990000-0000-7000-8000-000000000001","slug":"example","kind":"series","planet":"action","name":{"ar":"مثال","en":"example"},"tagline":{"ar":"مثال","en":"example"},"colors":{"from":"example","to":"example","accent":"example"},"emoji":"example","jingle":"mystery","coverUrl":"http://localhost:4000/example","sampleUrl":"http://localhost:4000/example","loopUrl":"http://localhost:4000/example","dialect":"ar-SA","narrator":true,"ideas":[{"ar":"مثال","en":"example"}],"cast":[{"id":"example","name":{"ar":"مثال","en":"example"},"appearance":"example","personality":"","gender":"male","age":"child","voiceId":null,"voiceFx":"none","imageUrl":"http://localhost:4000/example"}],"locked":true,"order":-9007199254740991}]}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/cartoon/themes","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/cartoon/themes","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/cartoon/themes","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/cartoon/themes","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/cartoon/themes","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/cartoon/themes","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/cartoon/themes","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/cartoon/themes","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/cartoon/themes","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/cartoon/themes","traceId":"request-id"}}}}}}},"/v1/cartoon/sounds":{"get":{"operationId":"searchCartoonSounds","tags":["Cartoon"],"summary":"Search the sound library (for swapping a cue in the sound editor)","description":"Requires workspace role viewer or above. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"q","in":"query","required":false,"schema":{"type":"string","maxLength":200}},{"name":"category","in":"query","required":false,"schema":{"type":"string","enum":["hard","foley","ambience","stinger","transition","music"]}},{"name":"theme","in":"query","required":false,"schema":{"type":"string","maxLength":80}},{"name":"limit","in":"query","required":false,"schema":{"default":40,"type":"integer","minimum":1,"maximum":100}}],"security":[{"session":[]},{"apiKey":[]}],"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"items":{"type":"array","items":{"type":"object","properties":{"name":{"type":"object","properties":{"ar":{"type":"string","minLength":1},"en":{"type":"string","minLength":1}},"required":["ar","en"]},"tags":{"maxItems":40,"type":"array","items":{"type":"string","minLength":1,"maxLength":40}},"category":{"type":"string","enum":["hard","foley","ambience","stinger","transition","music"]},"packs":{"default":[],"description":"Theme slugs this sound belongs to","maxItems":40,"type":"array","items":{"type":"string","minLength":1,"maxLength":80}},"duration":{"default":0,"type":"number","minimum":0},"source":{"type":"string","enum":["upload","generated","synth"]},"key":{"default":null,"anyOf":[{"type":"string","maxLength":400},{"type":"null"}]},"synth":{"default":null,"description":"Built-in recipe (source synth): rendered by ffmpeg, no file","anyOf":[{"type":"string","maxLength":40},{"type":"null"}]},"prompt":{"default":null,"anyOf":[{"type":"string","maxLength":500},{"type":"null"}]},"loop":{"default":false,"type":"boolean"},"enabled":{"default":true,"type":"boolean"},"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)$"},"url":{"type":["string","null"]},"updatedAt":{"type":"string"}},"required":["name","tags","category","source","id","url","updatedAt"]}}},"required":["items"]},"example":{"items":[{"name":{"ar":"مثال","en":"example"},"tags":["example"],"category":"hard","packs":[],"duration":0,"source":"upload","key":null,"synth":null,"prompt":null,"loop":false,"enabled":true,"id":"01990000-0000-7000-8000-000000000001","url":"example","updatedAt":"2026-09-19T12:00:00.000Z"}]}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/cartoon/sounds","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/cartoon/sounds","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/cartoon/sounds","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/cartoon/sounds","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/cartoon/sounds","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/cartoon/sounds","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/cartoon/sounds","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/cartoon/sounds","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/cartoon/sounds","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/cartoon/sounds","traceId":"request-id"}}}}}}},"/v1/cartoon/projects":{"get":{"operationId":"listCartoonProjects","tags":["Cartoon"],"summary":"list Cartoon Projects","description":"Requires workspace role viewer or above. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"cursor","in":"query","required":false,"schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"schema":{"default":25,"type":"integer","minimum":1,"maximum":100}},{"name":"q","in":"query","required":false,"schema":{"type":"string","maxLength":200}},{"name":"occasion","in":"query","required":false,"schema":{"description":"birthday = Birthday Hero videos only; studio = studio episodes only; default both","type":"string","enum":["birthday","studio"]}}],"security":[{"session":[]},{"apiKey":[]}],"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"items":{"type":"array","items":{"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)$"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"},"title":{"type":"string"},"logline":{"type":"string"},"status":{"type":"string","enum":["writing","scripted","casting","cast","storyboarding","storyboarded","producing","mixing","ready","failed"],"description":"scripted, cast and storyboarded wait for the person (director mode); one-click mode walks through them"},"progress":{"type":"number"},"mode":{"type":"string","enum":["auto","director"]},"lengthSeconds":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"aspectRatio":{"type":"string","enum":["9:16","16:9","1:1"]},"episode":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"renderedAt":{"type":["string","null"]},"occasion":{"anyOf":[{"type":"string","enum":["birthday"]},{"type":"null"}],"description":"Set on a Birthday Hero video"},"themeSlug":{"type":"string"},"themeName":{"type":"object","properties":{"ar":{"type":"string","minLength":1},"en":{"type":"string","minLength":1}},"required":["ar","en"]},"themeColors":{"type":"object","properties":{"from":{"type":"string","pattern":"^#[0-9a-fA-F]{6}$"},"to":{"type":"string","pattern":"^#[0-9a-fA-F]{6}$"},"accent":{"type":"string","pattern":"^#[0-9a-fA-F]{6}$"}},"required":["from","to","accent"]},"themeEmoji":{"type":"string"},"thumbnailUrl":{"type":["string","null"]}},"required":["id","createdAt","updatedAt","title","logline","status","progress","mode","lengthSeconds","aspectRatio","episode","renderedAt","occasion","themeSlug","themeName","themeColors","themeEmoji","thumbnailUrl"]}},"nextCursor":{"type":["string","null"]}},"required":["items","nextCursor"]},"example":{"items":[{"id":"01990000-0000-7000-8000-000000000001","createdAt":"2026-09-19T12:00:00.000Z","updatedAt":"2026-09-19T12:00:00.000Z","title":"example","logline":"example","status":"writing","progress":1,"mode":"auto","lengthSeconds":-9007199254740991,"aspectRatio":"9:16","episode":-9007199254740991,"renderedAt":"2026-09-19T12:00:00.000Z","occasion":"birthday","themeSlug":"example","themeName":{"ar":"مثال","en":"example"},"themeColors":{"from":"example","to":"example","accent":"example"},"themeEmoji":"example","thumbnailUrl":"http://localhost:4000/example"}],"nextCursor":"example"}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/cartoon/projects","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/cartoon/projects","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/cartoon/projects","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/cartoon/projects","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/cartoon/projects","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/cartoon/projects","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/cartoon/projects","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/cartoon/projects","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/cartoon/projects","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/cartoon/projects","traceId":"request-id"}}}}}},"post":{"operationId":"createCartoonProject","tags":["Cartoon"],"summary":"Start an episode: writes the screenplay (status scripted). One-click mode then casts, storyboards and produces it (credits reserved when production starts). A 403 names the plan limit in errors[0].path","description":"Requires workspace role editor or above. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"X-CSRF-Token","in":"header","required":false,"description":"Required for cookie-authenticated mutations; returned by sign-in/sign-up.","schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"themeSlug":{"type":"string","minLength":1,"maxLength":80},"idea":{"type":"string","minLength":3,"maxLength":1500,"description":"One line (\"a cat who wants to be an astronaut\") or a whole story"},"lengthSeconds":{"default":30,"anyOf":[{"type":"number","const":20},{"type":"number","const":30},{"type":"number","const":45},{"type":"number","const":60},{"type":"number","const":90},{"type":"number","const":120},{"type":"number","const":150},{"type":"number","const":180}]},"dialect":{"description":"Default: the theme dialect","type":"string","minLength":2,"maxLength":20},"aspectRatio":{"default":"9:16","type":"string","enum":["9:16","16:9","1:1"]},"tier":{"description":"Video tier slug; default the theme tier or the cheapest allowed","type":"string","minLength":1,"maxLength":100},"mode":{"default":"auto","description":"auto: one click to a finished episode (credits reserved when production starts); director: stops for review after the screenplay, the cast and the storyboard","type":"string","enum":["auto","director"]},"castIds":{"description":"Series cast members to include","maxItems":12,"type":"array","items":{"type":"string","maxLength":40}},"captions":{"default":true,"type":"boolean"},"opening":{"description":"Retired: the sung opening is no longer made; ignored","type":"boolean"},"previousId":{"description":"Continue from this episode: same cast, sheets and world","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)$"}},"required":["themeSlug","idea"]},"example":{"themeSlug":"example","idea":"example","lengthSeconds":30,"dialect":"ar-SA","aspectRatio":"9:16","tier":"example","mode":"auto","castIds":["example"],"captions":true,"opening":true,"previousId":"01990000-0000-7000-8000-000000000001"}}}},"responses":{"201":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","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)$"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"},"title":{"type":"string"},"logline":{"type":"string"},"idea":{"type":"string"},"status":{"type":"string","enum":["writing","scripted","casting","cast","storyboarding","storyboarded","producing","mixing","ready","failed"],"description":"scripted, cast and storyboarded wait for the person (director mode); one-click mode walks through them"},"stage":{"anyOf":[{"type":"string","enum":["write","sheets","storyboard","voice","render","poll","sound","mix"]},{"type":"null"}]},"progress":{"type":"number"},"error":{"description":"WRITE_FAILED, SHEETS_FAILED, STORYBOARD_FAILED, VOICE_FAILED, TOO_LONG, SCENE_FAILED, RENDER_FAILED, REMIX_FAILED; on a storyboard one-click could not produce: the refusal code (FORBIDDEN, INSUFFICIENT_CREDITS…) with errorPath","type":["string","null"]},"failedStage":{"anyOf":[{"type":"string","enum":["write","sheets","storyboard","voice","render","poll","sound","mix"]},{"type":"null"}]},"errorPath":{"description":"The plan limit that stopped one-click production (an entitlement key), for the upgrade prompt","type":["string","null"]},"departments":{"type":"object","properties":{"dialogue":{"type":"number"},"animation":{"type":"number"},"sound":{"type":"number"},"music":{"type":"number"},"mix":{"type":"number"}},"required":["dialogue","animation","sound","music","mix"],"description":"Progress 0..100 of each department while producing (the production floor)"},"mode":{"type":"string","enum":["auto","director"]},"theme":{"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)$"},"slug":{"type":"string"},"kind":{"type":"string","enum":["series","style"]},"planet":{"anyOf":[{"type":"string","enum":["action","adventure","sports","comedy","zumurruda","science","bonbon","heroes"]},{"type":"null"}]},"name":{"type":"object","properties":{"ar":{"type":"string","minLength":1},"en":{"type":"string","minLength":1}},"required":["ar","en"]},"tagline":{"type":"object","properties":{"ar":{"type":"string","minLength":1},"en":{"type":"string","minLength":1}},"required":["ar","en"]},"colors":{"type":"object","properties":{"from":{"type":"string","pattern":"^#[0-9a-fA-F]{6}$"},"to":{"type":"string","pattern":"^#[0-9a-fA-F]{6}$"},"accent":{"type":"string","pattern":"^#[0-9a-fA-F]{6}$"}},"required":["from","to","accent"]},"emoji":{"type":"string"},"jingle":{"type":"string","enum":["mystery","heroic","sports","mecha","tearjerker","pirate","power","creature","slapstick","anime","retro","family","kawaii","storybook","kids","adventure"]},"coverUrl":{"type":["string","null"]},"sampleUrl":{"type":["string","null"]},"loopUrl":{"type":["string","null"]},"dialect":{"type":"string"},"narrator":{"type":"boolean"},"ideas":{"type":"array","items":{"type":"object","properties":{"ar":{"type":"string","minLength":1},"en":{"type":"string","minLength":1}},"required":["ar","en"]}},"cast":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":40,"pattern":"^[a-z0-9-]+$"},"name":{"type":"object","properties":{"ar":{"type":"string","minLength":1},"en":{"type":"string","minLength":1}},"required":["ar","en"]},"appearance":{"type":"string","minLength":1,"maxLength":600,"description":"English description the image model draws (hair, outfit, colours, build)"},"personality":{"default":"","type":"string","maxLength":300},"gender":{"type":"string","enum":["male","female"]},"age":{"type":"string","enum":["child","teen","adult","elder"]},"voiceId":{"default":null,"description":"Default voice (Cartoon category)","anyOf":[{"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)$"},{"type":"null"}]},"voiceFx":{"default":"none","type":"string","enum":["none","chibi","giant","robot","alien","radio","echo","monster"]},"imageUrl":{"type":["string","null"]}},"required":["id","name","appearance","gender","age","imageUrl"]}},"locked":{"type":"boolean","description":"The plan does not include this theme (series need cartoonSeries)"},"order":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}},"required":["id","slug","kind","planet","name","tagline","colors","emoji","jingle","coverUrl","sampleUrl","loopUrl","dialect","narrator","ideas","cast","locked","order"]},"lengthSeconds":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"dialect":{"type":"string"},"aspectRatio":{"type":"string","enum":["9:16","16:9","1:1"]},"tier":{"type":"string"},"captions":{"type":"boolean"},"opening":{"type":"boolean"},"characters":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"role":{"type":"string"},"appearance":{"type":"string"},"personality":{"type":"string"},"gender":{"type":"string","enum":["male","female"]},"age":{"type":"string","enum":["child","teen","adult","elder"]},"voiceId":{"anyOf":[{"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)$"},{"type":"null"}]},"voiceFx":{"type":"string","enum":["none","chibi","giant","robot","alien","radio","echo","monster"]},"castId":{"type":["string","null"]},"sheetUrl":{"type":["string","null"]},"sheetStatus":{"type":"string","enum":["none","pending","ready","failed"]}},"required":["id","name","role","appearance","personality","gender","age","voiceId","voiceFx","castId","sheetUrl","sheetStatus"]}},"locations":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"ambience":{"type":"string"}},"required":["id","name","description","ambience"]}},"shots":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"locationId":{"type":["string","null"]},"camera":{"type":"string"},"action":{"type":"string","description":"English visual prompt"},"summary":{"description":"What the shot shows, one line in the episode language (the screenplay page shows it)","type":["string","null"]},"characters":{"type":"array","items":{"type":"string"}},"lines":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"speaker":{"type":"string","description":"A character id, or narrator"},"text":{"type":"string"},"emotion":{"type":"string"},"start":{"type":["number","null"]},"end":{"type":["number","null"]},"audioUrl":{"type":["string","null"]}},"required":["id","speaker","text","emotion","start","end","audioUrl"]}},"sfx":{"type":"array","items":{"type":"object","properties":{"what":{"type":"string"},"label":{"description":"Its name in the episode language","type":"string"},"tags":{"type":"array","items":{"type":"string"}},"at":{"type":"number"},"intensity":{"type":"string","enum":["soft","normal","big"]}},"required":["what","tags","at","intensity"]}},"music":{"type":"string","enum":["none","stinger","swell","tension","victory","sad","comic"]},"start":{"type":["number","null"]},"end":{"type":["number","null"]},"status":{"type":"string","enum":["pending","queued","rendering","ready","failed"]},"frameUrl":{"type":["string","null"]},"clipUrl":{"type":["string","null"]},"error":{"type":["string","null"]},"parentId":{"description":"Set on a shot split from a long one (it shares the parent still)","type":["string","null"]}},"required":["id","locationId","camera","action","summary","characters","lines","sfx","music","start","end","status","frameUrl","clipUrl","error","parentId"]}},"song":{"anyOf":[{"type":"object","properties":{"lyrics":{"type":"string"}},"required":["lyrics"]},{"type":"null"}]},"cues":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"lane":{"type":"string","enum":["sfx","foley","ambience","music"]},"label":{"type":"string"},"at":{"type":"number"},"duration":{"type":"number"},"gain":{"type":"number","description":"dB"},"pan":{"type":"number"},"muted":{"type":"boolean"},"source":{"type":"string","enum":["library","generated","synth"]},"soundId":{"anyOf":[{"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)$"},{"type":"null"}]},"url":{"type":["string","null"]},"shotId":{"type":["string","null"]},"generating":{"type":"boolean","description":"A new take is being made (regenerate)"},"alternatives":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"label":{"type":"string"},"source":{"type":"string","enum":["library","generated","synth"]},"url":{"type":["string","null"]}},"required":["id","label","source","url"]}}},"required":["id","lane","label","at","duration","gain","pan","muted","source","soundId","url","shotId","generating","alternatives"]}},"mix":{"type":"object","propertyNames":{"type":"string","enum":["dialogue","sfx","foley","ambience","music"]},"additionalProperties":{"type":"object","properties":{"gain":{"type":"number","minimum":-30,"maximum":12},"muted":{"type":"boolean"}},"required":["gain","muted"]},"required":["dialogue","sfx","foley","ambience","music"]},"duration":{"type":"number"},"creditsReserved":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"creditsCharged":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"regenerationsLeft":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"previousId":{"anyOf":[{"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)$"},{"type":"null"}]},"episode":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"output":{"anyOf":[{"type":"object","properties":{"videoUrl":{"type":["string","null"]},"downloadUrl":{"type":["string","null"]},"thumbnailUrl":{"type":["string","null"]},"watermarked":{"type":"boolean"},"generationId":{"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)$"},"duration":{"type":"number"},"stems":{"anyOf":[{"type":"object","propertyNames":{"type":"string","enum":["dialogue","sfx","foley","ambience","music"]},"additionalProperties":{"type":["string","null"]},"required":["dialogue","sfx","foley","ambience","music"]},{"type":"null"}],"description":"Signed WAV per lane (entitlement cartoonStems)"},"posterUrl":{"type":["string","null"]}},"required":["videoUrl","downloadUrl","thumbnailUrl","watermarked","generationId","duration","stems","posterUrl"]},{"type":"null"}]},"renderedAt":{"type":["string","null"]},"occasion":{"anyOf":[{"type":"string","enum":["birthday"]},{"type":"null"}],"description":"Set on a Birthday Hero video"},"hero":{"anyOf":[{"type":"object","properties":{"name":{"type":"string"},"age":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"gender":{"type":"string","enum":["boy","girl"]},"message":{"type":"string"},"details":{"type":"string"},"photoUrls":{"type":"array","items":{"type":"string"},"description":"Signed URLs of the uploaded photos (empty once deleted)"},"photosDeleted":{"type":"boolean"},"photosExpireAt":{"type":["string","null"]}},"required":["name","age","gender","message","details","photoUrls","photosDeleted","photosExpireAt"]},{"type":"null"}],"description":"The birthday child (Birthday Hero videos only)"}},"required":["id","createdAt","updatedAt","title","logline","idea","status","stage","progress","error","failedStage","errorPath","departments","mode","theme","lengthSeconds","dialect","aspectRatio","tier","captions","opening","characters","locations","shots","song","cues","mix","duration","creditsReserved","creditsCharged","regenerationsLeft","previousId","episode","output","renderedAt","occasion","hero"]},"example":{"id":"01990000-0000-7000-8000-000000000001","createdAt":"2026-09-19T12:00:00.000Z","updatedAt":"2026-09-19T12:00:00.000Z","title":"example","logline":"example","idea":"example","status":"writing","stage":"write","progress":1,"error":"example","failedStage":"write","errorPath":"example","departments":{"dialogue":1,"animation":1,"sound":1,"music":1,"mix":1},"mode":"auto","theme":{"id":"01990000-0000-7000-8000-000000000001","slug":"example","kind":"series","planet":"action","name":{"ar":"مثال","en":"example"},"tagline":{"ar":"مثال","en":"example"},"colors":{"from":"example","to":"example","accent":"example"},"emoji":"example","jingle":"mystery","coverUrl":"http://localhost:4000/example","sampleUrl":"http://localhost:4000/example","loopUrl":"http://localhost:4000/example","dialect":"ar-SA","narrator":true,"ideas":[{"ar":"مثال","en":"example"}],"cast":[{"id":"example","name":{"ar":"مثال","en":"example"},"appearance":"example","personality":"","gender":"male","age":"child","voiceId":null,"voiceFx":"none","imageUrl":"http://localhost:4000/example"}],"locked":true,"order":-9007199254740991},"lengthSeconds":-9007199254740991,"dialect":"ar-SA","aspectRatio":"9:16","tier":"example","captions":true,"opening":true,"characters":[{"id":"example","name":"Noura","role":"example","appearance":"example","personality":"example","gender":"male","age":"child","voiceId":"01990000-0000-7000-8000-000000000001","voiceFx":"none","castId":"example","sheetUrl":"http://localhost:4000/example","sheetStatus":"none"}],"locations":[{"id":"example","name":"Noura","description":"example","ambience":"example"}],"shots":[{"id":"example","locationId":"example","camera":"example","action":"example","summary":"example","characters":["example"],"lines":[{"id":"example","speaker":"example","text":"مرحباً بك في فوكلا.","emotion":"example","start":"example","end":"example","audioUrl":"http://localhost:4000/example"}],"sfx":[{"what":"example","label":"example","tags":["example"],"at":1,"intensity":"soft"}],"music":"none","start":"example","end":"example","status":"pending","frameUrl":"http://localhost:4000/example","clipUrl":"http://localhost:4000/example","error":"example","parentId":"example"}],"song":{"lyrics":"example"},"cues":[{"id":"example","lane":"sfx","label":"example","at":1,"duration":1,"gain":1,"pan":1,"muted":true,"source":"library","soundId":"01990000-0000-7000-8000-000000000001","url":"example","shotId":"example","generating":true,"alternatives":[{"id":"example","label":"example","source":"library","url":"example"}]}],"mix":{},"duration":1,"creditsReserved":-9007199254740991,"creditsCharged":-9007199254740991,"regenerationsLeft":-9007199254740991,"previousId":"01990000-0000-7000-8000-000000000001","episode":-9007199254740991,"output":{"videoUrl":"http://localhost:4000/example","downloadUrl":"http://localhost:4000/example","thumbnailUrl":"http://localhost:4000/example","watermarked":true,"generationId":"01990000-0000-7000-8000-000000000001","duration":1,"stems":{},"posterUrl":"http://localhost:4000/example"},"renderedAt":"2026-09-19T12:00:00.000Z","occasion":"birthday","hero":{"name":"Noura","age":-9007199254740991,"gender":"boy","message":"example","details":"example","photoUrls":["example"],"photosDeleted":true,"photosExpireAt":"2026-09-19T12:00:00.000Z"}}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/cartoon/projects","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/cartoon/projects","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/cartoon/projects","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/cartoon/projects","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/cartoon/projects","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/cartoon/projects","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/cartoon/projects","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/cartoon/projects","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/cartoon/projects","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/cartoon/projects","traceId":"request-id"}}}}}}},"/v1/cartoon/projects/{id}":{"get":{"operationId":"getCartoonProject","tags":["Cartoon"],"summary":"get Cartoon Project","description":"Requires workspace role viewer or above. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","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)$"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"},"title":{"type":"string"},"logline":{"type":"string"},"idea":{"type":"string"},"status":{"type":"string","enum":["writing","scripted","casting","cast","storyboarding","storyboarded","producing","mixing","ready","failed"],"description":"scripted, cast and storyboarded wait for the person (director mode); one-click mode walks through them"},"stage":{"anyOf":[{"type":"string","enum":["write","sheets","storyboard","voice","render","poll","sound","mix"]},{"type":"null"}]},"progress":{"type":"number"},"error":{"description":"WRITE_FAILED, SHEETS_FAILED, STORYBOARD_FAILED, VOICE_FAILED, TOO_LONG, SCENE_FAILED, RENDER_FAILED, REMIX_FAILED; on a storyboard one-click could not produce: the refusal code (FORBIDDEN, INSUFFICIENT_CREDITS…) with errorPath","type":["string","null"]},"failedStage":{"anyOf":[{"type":"string","enum":["write","sheets","storyboard","voice","render","poll","sound","mix"]},{"type":"null"}]},"errorPath":{"description":"The plan limit that stopped one-click production (an entitlement key), for the upgrade prompt","type":["string","null"]},"departments":{"type":"object","properties":{"dialogue":{"type":"number"},"animation":{"type":"number"},"sound":{"type":"number"},"music":{"type":"number"},"mix":{"type":"number"}},"required":["dialogue","animation","sound","music","mix"],"description":"Progress 0..100 of each department while producing (the production floor)"},"mode":{"type":"string","enum":["auto","director"]},"theme":{"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)$"},"slug":{"type":"string"},"kind":{"type":"string","enum":["series","style"]},"planet":{"anyOf":[{"type":"string","enum":["action","adventure","sports","comedy","zumurruda","science","bonbon","heroes"]},{"type":"null"}]},"name":{"type":"object","properties":{"ar":{"type":"string","minLength":1},"en":{"type":"string","minLength":1}},"required":["ar","en"]},"tagline":{"type":"object","properties":{"ar":{"type":"string","minLength":1},"en":{"type":"string","minLength":1}},"required":["ar","en"]},"colors":{"type":"object","properties":{"from":{"type":"string","pattern":"^#[0-9a-fA-F]{6}$"},"to":{"type":"string","pattern":"^#[0-9a-fA-F]{6}$"},"accent":{"type":"string","pattern":"^#[0-9a-fA-F]{6}$"}},"required":["from","to","accent"]},"emoji":{"type":"string"},"jingle":{"type":"string","enum":["mystery","heroic","sports","mecha","tearjerker","pirate","power","creature","slapstick","anime","retro","family","kawaii","storybook","kids","adventure"]},"coverUrl":{"type":["string","null"]},"sampleUrl":{"type":["string","null"]},"loopUrl":{"type":["string","null"]},"dialect":{"type":"string"},"narrator":{"type":"boolean"},"ideas":{"type":"array","items":{"type":"object","properties":{"ar":{"type":"string","minLength":1},"en":{"type":"string","minLength":1}},"required":["ar","en"]}},"cast":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":40,"pattern":"^[a-z0-9-]+$"},"name":{"type":"object","properties":{"ar":{"type":"string","minLength":1},"en":{"type":"string","minLength":1}},"required":["ar","en"]},"appearance":{"type":"string","minLength":1,"maxLength":600,"description":"English description the image model draws (hair, outfit, colours, build)"},"personality":{"default":"","type":"string","maxLength":300},"gender":{"type":"string","enum":["male","female"]},"age":{"type":"string","enum":["child","teen","adult","elder"]},"voiceId":{"default":null,"description":"Default voice (Cartoon category)","anyOf":[{"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)$"},{"type":"null"}]},"voiceFx":{"default":"none","type":"string","enum":["none","chibi","giant","robot","alien","radio","echo","monster"]},"imageUrl":{"type":["string","null"]}},"required":["id","name","appearance","gender","age","imageUrl"]}},"locked":{"type":"boolean","description":"The plan does not include this theme (series need cartoonSeries)"},"order":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}},"required":["id","slug","kind","planet","name","tagline","colors","emoji","jingle","coverUrl","sampleUrl","loopUrl","dialect","narrator","ideas","cast","locked","order"]},"lengthSeconds":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"dialect":{"type":"string"},"aspectRatio":{"type":"string","enum":["9:16","16:9","1:1"]},"tier":{"type":"string"},"captions":{"type":"boolean"},"opening":{"type":"boolean"},"characters":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"role":{"type":"string"},"appearance":{"type":"string"},"personality":{"type":"string"},"gender":{"type":"string","enum":["male","female"]},"age":{"type":"string","enum":["child","teen","adult","elder"]},"voiceId":{"anyOf":[{"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)$"},{"type":"null"}]},"voiceFx":{"type":"string","enum":["none","chibi","giant","robot","alien","radio","echo","monster"]},"castId":{"type":["string","null"]},"sheetUrl":{"type":["string","null"]},"sheetStatus":{"type":"string","enum":["none","pending","ready","failed"]}},"required":["id","name","role","appearance","personality","gender","age","voiceId","voiceFx","castId","sheetUrl","sheetStatus"]}},"locations":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"ambience":{"type":"string"}},"required":["id","name","description","ambience"]}},"shots":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"locationId":{"type":["string","null"]},"camera":{"type":"string"},"action":{"type":"string","description":"English visual prompt"},"summary":{"description":"What the shot shows, one line in the episode language (the screenplay page shows it)","type":["string","null"]},"characters":{"type":"array","items":{"type":"string"}},"lines":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"speaker":{"type":"string","description":"A character id, or narrator"},"text":{"type":"string"},"emotion":{"type":"string"},"start":{"type":["number","null"]},"end":{"type":["number","null"]},"audioUrl":{"type":["string","null"]}},"required":["id","speaker","text","emotion","start","end","audioUrl"]}},"sfx":{"type":"array","items":{"type":"object","properties":{"what":{"type":"string"},"label":{"description":"Its name in the episode language","type":"string"},"tags":{"type":"array","items":{"type":"string"}},"at":{"type":"number"},"intensity":{"type":"string","enum":["soft","normal","big"]}},"required":["what","tags","at","intensity"]}},"music":{"type":"string","enum":["none","stinger","swell","tension","victory","sad","comic"]},"start":{"type":["number","null"]},"end":{"type":["number","null"]},"status":{"type":"string","enum":["pending","queued","rendering","ready","failed"]},"frameUrl":{"type":["string","null"]},"clipUrl":{"type":["string","null"]},"error":{"type":["string","null"]},"parentId":{"description":"Set on a shot split from a long one (it shares the parent still)","type":["string","null"]}},"required":["id","locationId","camera","action","summary","characters","lines","sfx","music","start","end","status","frameUrl","clipUrl","error","parentId"]}},"song":{"anyOf":[{"type":"object","properties":{"lyrics":{"type":"string"}},"required":["lyrics"]},{"type":"null"}]},"cues":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"lane":{"type":"string","enum":["sfx","foley","ambience","music"]},"label":{"type":"string"},"at":{"type":"number"},"duration":{"type":"number"},"gain":{"type":"number","description":"dB"},"pan":{"type":"number"},"muted":{"type":"boolean"},"source":{"type":"string","enum":["library","generated","synth"]},"soundId":{"anyOf":[{"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)$"},{"type":"null"}]},"url":{"type":["string","null"]},"shotId":{"type":["string","null"]},"generating":{"type":"boolean","description":"A new take is being made (regenerate)"},"alternatives":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"label":{"type":"string"},"source":{"type":"string","enum":["library","generated","synth"]},"url":{"type":["string","null"]}},"required":["id","label","source","url"]}}},"required":["id","lane","label","at","duration","gain","pan","muted","source","soundId","url","shotId","generating","alternatives"]}},"mix":{"type":"object","propertyNames":{"type":"string","enum":["dialogue","sfx","foley","ambience","music"]},"additionalProperties":{"type":"object","properties":{"gain":{"type":"number","minimum":-30,"maximum":12},"muted":{"type":"boolean"}},"required":["gain","muted"]},"required":["dialogue","sfx","foley","ambience","music"]},"duration":{"type":"number"},"creditsReserved":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"creditsCharged":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"regenerationsLeft":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"previousId":{"anyOf":[{"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)$"},{"type":"null"}]},"episode":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"output":{"anyOf":[{"type":"object","properties":{"videoUrl":{"type":["string","null"]},"downloadUrl":{"type":["string","null"]},"thumbnailUrl":{"type":["string","null"]},"watermarked":{"type":"boolean"},"generationId":{"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)$"},"duration":{"type":"number"},"stems":{"anyOf":[{"type":"object","propertyNames":{"type":"string","enum":["dialogue","sfx","foley","ambience","music"]},"additionalProperties":{"type":["string","null"]},"required":["dialogue","sfx","foley","ambience","music"]},{"type":"null"}],"description":"Signed WAV per lane (entitlement cartoonStems)"},"posterUrl":{"type":["string","null"]}},"required":["videoUrl","downloadUrl","thumbnailUrl","watermarked","generationId","duration","stems","posterUrl"]},{"type":"null"}]},"renderedAt":{"type":["string","null"]},"occasion":{"anyOf":[{"type":"string","enum":["birthday"]},{"type":"null"}],"description":"Set on a Birthday Hero video"},"hero":{"anyOf":[{"type":"object","properties":{"name":{"type":"string"},"age":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"gender":{"type":"string","enum":["boy","girl"]},"message":{"type":"string"},"details":{"type":"string"},"photoUrls":{"type":"array","items":{"type":"string"},"description":"Signed URLs of the uploaded photos (empty once deleted)"},"photosDeleted":{"type":"boolean"},"photosExpireAt":{"type":["string","null"]}},"required":["name","age","gender","message","details","photoUrls","photosDeleted","photosExpireAt"]},{"type":"null"}],"description":"The birthday child (Birthday Hero videos only)"}},"required":["id","createdAt","updatedAt","title","logline","idea","status","stage","progress","error","failedStage","errorPath","departments","mode","theme","lengthSeconds","dialect","aspectRatio","tier","captions","opening","characters","locations","shots","song","cues","mix","duration","creditsReserved","creditsCharged","regenerationsLeft","previousId","episode","output","renderedAt","occasion","hero"]},"example":{"id":"01990000-0000-7000-8000-000000000001","createdAt":"2026-09-19T12:00:00.000Z","updatedAt":"2026-09-19T12:00:00.000Z","title":"example","logline":"example","idea":"example","status":"writing","stage":"write","progress":1,"error":"example","failedStage":"write","errorPath":"example","departments":{"dialogue":1,"animation":1,"sound":1,"music":1,"mix":1},"mode":"auto","theme":{"id":"01990000-0000-7000-8000-000000000001","slug":"example","kind":"series","planet":"action","name":{"ar":"مثال","en":"example"},"tagline":{"ar":"مثال","en":"example"},"colors":{"from":"example","to":"example","accent":"example"},"emoji":"example","jingle":"mystery","coverUrl":"http://localhost:4000/example","sampleUrl":"http://localhost:4000/example","loopUrl":"http://localhost:4000/example","dialect":"ar-SA","narrator":true,"ideas":[{"ar":"مثال","en":"example"}],"cast":[{"id":"example","name":{"ar":"مثال","en":"example"},"appearance":"example","personality":"","gender":"male","age":"child","voiceId":null,"voiceFx":"none","imageUrl":"http://localhost:4000/example"}],"locked":true,"order":-9007199254740991},"lengthSeconds":-9007199254740991,"dialect":"ar-SA","aspectRatio":"9:16","tier":"example","captions":true,"opening":true,"characters":[{"id":"example","name":"Noura","role":"example","appearance":"example","personality":"example","gender":"male","age":"child","voiceId":"01990000-0000-7000-8000-000000000001","voiceFx":"none","castId":"example","sheetUrl":"http://localhost:4000/example","sheetStatus":"none"}],"locations":[{"id":"example","name":"Noura","description":"example","ambience":"example"}],"shots":[{"id":"example","locationId":"example","camera":"example","action":"example","summary":"example","characters":["example"],"lines":[{"id":"example","speaker":"example","text":"مرحباً بك في فوكلا.","emotion":"example","start":"example","end":"example","audioUrl":"http://localhost:4000/example"}],"sfx":[{"what":"example","label":"example","tags":["example"],"at":1,"intensity":"soft"}],"music":"none","start":"example","end":"example","status":"pending","frameUrl":"http://localhost:4000/example","clipUrl":"http://localhost:4000/example","error":"example","parentId":"example"}],"song":{"lyrics":"example"},"cues":[{"id":"example","lane":"sfx","label":"example","at":1,"duration":1,"gain":1,"pan":1,"muted":true,"source":"library","soundId":"01990000-0000-7000-8000-000000000001","url":"example","shotId":"example","generating":true,"alternatives":[{"id":"example","label":"example","source":"library","url":"example"}]}],"mix":{},"duration":1,"creditsReserved":-9007199254740991,"creditsCharged":-9007199254740991,"regenerationsLeft":-9007199254740991,"previousId":"01990000-0000-7000-8000-000000000001","episode":-9007199254740991,"output":{"videoUrl":"http://localhost:4000/example","downloadUrl":"http://localhost:4000/example","thumbnailUrl":"http://localhost:4000/example","watermarked":true,"generationId":"01990000-0000-7000-8000-000000000001","duration":1,"stems":{},"posterUrl":"http://localhost:4000/example"},"renderedAt":"2026-09-19T12:00:00.000Z","occasion":"birthday","hero":{"name":"Noura","age":-9007199254740991,"gender":"boy","message":"example","details":"example","photoUrls":["example"],"photosDeleted":true,"photosExpireAt":"2026-09-19T12:00:00.000Z"}}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/cartoon/projects/{id}","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/cartoon/projects/{id}","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/cartoon/projects/{id}","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/cartoon/projects/{id}","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/cartoon/projects/{id}","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/cartoon/projects/{id}","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/cartoon/projects/{id}","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/cartoon/projects/{id}","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/cartoon/projects/{id}","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/cartoon/projects/{id}","traceId":"request-id"}}}}}},"patch":{"operationId":"updateCartoonProject","tags":["Cartoon"],"summary":"Edit the screenplay before production: title, characters (name, look, voice, voice effect), shot actions and lines, the opening lyrics","description":"Requires workspace role editor or above. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"X-CSRF-Token","in":"header","required":false,"description":"Required for cookie-authenticated mutations; returned by sign-in/sign-up.","schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"title":{"type":"string","minLength":1,"maxLength":120},"characters":{"maxItems":12,"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string","minLength":1,"maxLength":60},"appearance":{"type":"string","minLength":3,"maxLength":600},"voiceId":{"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)$"},"voiceFx":{"type":"string","enum":["none","chibi","giant","robot","alien","radio","echo","monster"]}},"required":["id"]}},"shots":{"maxItems":40,"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"action":{"type":"string","minLength":3,"maxLength":1500},"lines":{"maxItems":6,"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"text":{"type":"string","minLength":1,"maxLength":400},"emotion":{"type":"string","maxLength":40},"speaker":{"type":"string","maxLength":40}},"required":["id"]}}},"required":["id"]}},"song":{"type":"object","properties":{"lyrics":{"type":"string","maxLength":600}},"required":["lyrics"]},"captions":{"type":"boolean"},"opening":{"type":"boolean"}}},"example":{"title":"example","characters":[{"id":"example","name":"Noura","appearance":"example","voiceId":"01990000-0000-7000-8000-000000000001","voiceFx":"none"}],"shots":[{"id":"example","action":"example","lines":[{"id":"example","text":"مرحباً بك في فوكلا.","emotion":"example","speaker":"example"}]}],"song":{"lyrics":"example"},"captions":true,"opening":true}}}},"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","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)$"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"},"title":{"type":"string"},"logline":{"type":"string"},"idea":{"type":"string"},"status":{"type":"string","enum":["writing","scripted","casting","cast","storyboarding","storyboarded","producing","mixing","ready","failed"],"description":"scripted, cast and storyboarded wait for the person (director mode); one-click mode walks through them"},"stage":{"anyOf":[{"type":"string","enum":["write","sheets","storyboard","voice","render","poll","sound","mix"]},{"type":"null"}]},"progress":{"type":"number"},"error":{"description":"WRITE_FAILED, SHEETS_FAILED, STORYBOARD_FAILED, VOICE_FAILED, TOO_LONG, SCENE_FAILED, RENDER_FAILED, REMIX_FAILED; on a storyboard one-click could not produce: the refusal code (FORBIDDEN, INSUFFICIENT_CREDITS…) with errorPath","type":["string","null"]},"failedStage":{"anyOf":[{"type":"string","enum":["write","sheets","storyboard","voice","render","poll","sound","mix"]},{"type":"null"}]},"errorPath":{"description":"The plan limit that stopped one-click production (an entitlement key), for the upgrade prompt","type":["string","null"]},"departments":{"type":"object","properties":{"dialogue":{"type":"number"},"animation":{"type":"number"},"sound":{"type":"number"},"music":{"type":"number"},"mix":{"type":"number"}},"required":["dialogue","animation","sound","music","mix"],"description":"Progress 0..100 of each department while producing (the production floor)"},"mode":{"type":"string","enum":["auto","director"]},"theme":{"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)$"},"slug":{"type":"string"},"kind":{"type":"string","enum":["series","style"]},"planet":{"anyOf":[{"type":"string","enum":["action","adventure","sports","comedy","zumurruda","science","bonbon","heroes"]},{"type":"null"}]},"name":{"type":"object","properties":{"ar":{"type":"string","minLength":1},"en":{"type":"string","minLength":1}},"required":["ar","en"]},"tagline":{"type":"object","properties":{"ar":{"type":"string","minLength":1},"en":{"type":"string","minLength":1}},"required":["ar","en"]},"colors":{"type":"object","properties":{"from":{"type":"string","pattern":"^#[0-9a-fA-F]{6}$"},"to":{"type":"string","pattern":"^#[0-9a-fA-F]{6}$"},"accent":{"type":"string","pattern":"^#[0-9a-fA-F]{6}$"}},"required":["from","to","accent"]},"emoji":{"type":"string"},"jingle":{"type":"string","enum":["mystery","heroic","sports","mecha","tearjerker","pirate","power","creature","slapstick","anime","retro","family","kawaii","storybook","kids","adventure"]},"coverUrl":{"type":["string","null"]},"sampleUrl":{"type":["string","null"]},"loopUrl":{"type":["string","null"]},"dialect":{"type":"string"},"narrator":{"type":"boolean"},"ideas":{"type":"array","items":{"type":"object","properties":{"ar":{"type":"string","minLength":1},"en":{"type":"string","minLength":1}},"required":["ar","en"]}},"cast":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":40,"pattern":"^[a-z0-9-]+$"},"name":{"type":"object","properties":{"ar":{"type":"string","minLength":1},"en":{"type":"string","minLength":1}},"required":["ar","en"]},"appearance":{"type":"string","minLength":1,"maxLength":600,"description":"English description the image model draws (hair, outfit, colours, build)"},"personality":{"default":"","type":"string","maxLength":300},"gender":{"type":"string","enum":["male","female"]},"age":{"type":"string","enum":["child","teen","adult","elder"]},"voiceId":{"default":null,"description":"Default voice (Cartoon category)","anyOf":[{"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)$"},{"type":"null"}]},"voiceFx":{"default":"none","type":"string","enum":["none","chibi","giant","robot","alien","radio","echo","monster"]},"imageUrl":{"type":["string","null"]}},"required":["id","name","appearance","gender","age","imageUrl"]}},"locked":{"type":"boolean","description":"The plan does not include this theme (series need cartoonSeries)"},"order":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}},"required":["id","slug","kind","planet","name","tagline","colors","emoji","jingle","coverUrl","sampleUrl","loopUrl","dialect","narrator","ideas","cast","locked","order"]},"lengthSeconds":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"dialect":{"type":"string"},"aspectRatio":{"type":"string","enum":["9:16","16:9","1:1"]},"tier":{"type":"string"},"captions":{"type":"boolean"},"opening":{"type":"boolean"},"characters":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"role":{"type":"string"},"appearance":{"type":"string"},"personality":{"type":"string"},"gender":{"type":"string","enum":["male","female"]},"age":{"type":"string","enum":["child","teen","adult","elder"]},"voiceId":{"anyOf":[{"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)$"},{"type":"null"}]},"voiceFx":{"type":"string","enum":["none","chibi","giant","robot","alien","radio","echo","monster"]},"castId":{"type":["string","null"]},"sheetUrl":{"type":["string","null"]},"sheetStatus":{"type":"string","enum":["none","pending","ready","failed"]}},"required":["id","name","role","appearance","personality","gender","age","voiceId","voiceFx","castId","sheetUrl","sheetStatus"]}},"locations":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"ambience":{"type":"string"}},"required":["id","name","description","ambience"]}},"shots":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"locationId":{"type":["string","null"]},"camera":{"type":"string"},"action":{"type":"string","description":"English visual prompt"},"summary":{"description":"What the shot shows, one line in the episode language (the screenplay page shows it)","type":["string","null"]},"characters":{"type":"array","items":{"type":"string"}},"lines":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"speaker":{"type":"string","description":"A character id, or narrator"},"text":{"type":"string"},"emotion":{"type":"string"},"start":{"type":["number","null"]},"end":{"type":["number","null"]},"audioUrl":{"type":["string","null"]}},"required":["id","speaker","text","emotion","start","end","audioUrl"]}},"sfx":{"type":"array","items":{"type":"object","properties":{"what":{"type":"string"},"label":{"description":"Its name in the episode language","type":"string"},"tags":{"type":"array","items":{"type":"string"}},"at":{"type":"number"},"intensity":{"type":"string","enum":["soft","normal","big"]}},"required":["what","tags","at","intensity"]}},"music":{"type":"string","enum":["none","stinger","swell","tension","victory","sad","comic"]},"start":{"type":["number","null"]},"end":{"type":["number","null"]},"status":{"type":"string","enum":["pending","queued","rendering","ready","failed"]},"frameUrl":{"type":["string","null"]},"clipUrl":{"type":["string","null"]},"error":{"type":["string","null"]},"parentId":{"description":"Set on a shot split from a long one (it shares the parent still)","type":["string","null"]}},"required":["id","locationId","camera","action","summary","characters","lines","sfx","music","start","end","status","frameUrl","clipUrl","error","parentId"]}},"song":{"anyOf":[{"type":"object","properties":{"lyrics":{"type":"string"}},"required":["lyrics"]},{"type":"null"}]},"cues":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"lane":{"type":"string","enum":["sfx","foley","ambience","music"]},"label":{"type":"string"},"at":{"type":"number"},"duration":{"type":"number"},"gain":{"type":"number","description":"dB"},"pan":{"type":"number"},"muted":{"type":"boolean"},"source":{"type":"string","enum":["library","generated","synth"]},"soundId":{"anyOf":[{"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)$"},{"type":"null"}]},"url":{"type":["string","null"]},"shotId":{"type":["string","null"]},"generating":{"type":"boolean","description":"A new take is being made (regenerate)"},"alternatives":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"label":{"type":"string"},"source":{"type":"string","enum":["library","generated","synth"]},"url":{"type":["string","null"]}},"required":["id","label","source","url"]}}},"required":["id","lane","label","at","duration","gain","pan","muted","source","soundId","url","shotId","generating","alternatives"]}},"mix":{"type":"object","propertyNames":{"type":"string","enum":["dialogue","sfx","foley","ambience","music"]},"additionalProperties":{"type":"object","properties":{"gain":{"type":"number","minimum":-30,"maximum":12},"muted":{"type":"boolean"}},"required":["gain","muted"]},"required":["dialogue","sfx","foley","ambience","music"]},"duration":{"type":"number"},"creditsReserved":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"creditsCharged":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"regenerationsLeft":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"previousId":{"anyOf":[{"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)$"},{"type":"null"}]},"episode":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"output":{"anyOf":[{"type":"object","properties":{"videoUrl":{"type":["string","null"]},"downloadUrl":{"type":["string","null"]},"thumbnailUrl":{"type":["string","null"]},"watermarked":{"type":"boolean"},"generationId":{"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)$"},"duration":{"type":"number"},"stems":{"anyOf":[{"type":"object","propertyNames":{"type":"string","enum":["dialogue","sfx","foley","ambience","music"]},"additionalProperties":{"type":["string","null"]},"required":["dialogue","sfx","foley","ambience","music"]},{"type":"null"}],"description":"Signed WAV per lane (entitlement cartoonStems)"},"posterUrl":{"type":["string","null"]}},"required":["videoUrl","downloadUrl","thumbnailUrl","watermarked","generationId","duration","stems","posterUrl"]},{"type":"null"}]},"renderedAt":{"type":["string","null"]},"occasion":{"anyOf":[{"type":"string","enum":["birthday"]},{"type":"null"}],"description":"Set on a Birthday Hero video"},"hero":{"anyOf":[{"type":"object","properties":{"name":{"type":"string"},"age":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"gender":{"type":"string","enum":["boy","girl"]},"message":{"type":"string"},"details":{"type":"string"},"photoUrls":{"type":"array","items":{"type":"string"},"description":"Signed URLs of the uploaded photos (empty once deleted)"},"photosDeleted":{"type":"boolean"},"photosExpireAt":{"type":["string","null"]}},"required":["name","age","gender","message","details","photoUrls","photosDeleted","photosExpireAt"]},{"type":"null"}],"description":"The birthday child (Birthday Hero videos only)"}},"required":["id","createdAt","updatedAt","title","logline","idea","status","stage","progress","error","failedStage","errorPath","departments","mode","theme","lengthSeconds","dialect","aspectRatio","tier","captions","opening","characters","locations","shots","song","cues","mix","duration","creditsReserved","creditsCharged","regenerationsLeft","previousId","episode","output","renderedAt","occasion","hero"]},"example":{"id":"01990000-0000-7000-8000-000000000001","createdAt":"2026-09-19T12:00:00.000Z","updatedAt":"2026-09-19T12:00:00.000Z","title":"example","logline":"example","idea":"example","status":"writing","stage":"write","progress":1,"error":"example","failedStage":"write","errorPath":"example","departments":{"dialogue":1,"animation":1,"sound":1,"music":1,"mix":1},"mode":"auto","theme":{"id":"01990000-0000-7000-8000-000000000001","slug":"example","kind":"series","planet":"action","name":{"ar":"مثال","en":"example"},"tagline":{"ar":"مثال","en":"example"},"colors":{"from":"example","to":"example","accent":"example"},"emoji":"example","jingle":"mystery","coverUrl":"http://localhost:4000/example","sampleUrl":"http://localhost:4000/example","loopUrl":"http://localhost:4000/example","dialect":"ar-SA","narrator":true,"ideas":[{"ar":"مثال","en":"example"}],"cast":[{"id":"example","name":{"ar":"مثال","en":"example"},"appearance":"example","personality":"","gender":"male","age":"child","voiceId":null,"voiceFx":"none","imageUrl":"http://localhost:4000/example"}],"locked":true,"order":-9007199254740991},"lengthSeconds":-9007199254740991,"dialect":"ar-SA","aspectRatio":"9:16","tier":"example","captions":true,"opening":true,"characters":[{"id":"example","name":"Noura","role":"example","appearance":"example","personality":"example","gender":"male","age":"child","voiceId":"01990000-0000-7000-8000-000000000001","voiceFx":"none","castId":"example","sheetUrl":"http://localhost:4000/example","sheetStatus":"none"}],"locations":[{"id":"example","name":"Noura","description":"example","ambience":"example"}],"shots":[{"id":"example","locationId":"example","camera":"example","action":"example","summary":"example","characters":["example"],"lines":[{"id":"example","speaker":"example","text":"مرحباً بك في فوكلا.","emotion":"example","start":"example","end":"example","audioUrl":"http://localhost:4000/example"}],"sfx":[{"what":"example","label":"example","tags":["example"],"at":1,"intensity":"soft"}],"music":"none","start":"example","end":"example","status":"pending","frameUrl":"http://localhost:4000/example","clipUrl":"http://localhost:4000/example","error":"example","parentId":"example"}],"song":{"lyrics":"example"},"cues":[{"id":"example","lane":"sfx","label":"example","at":1,"duration":1,"gain":1,"pan":1,"muted":true,"source":"library","soundId":"01990000-0000-7000-8000-000000000001","url":"example","shotId":"example","generating":true,"alternatives":[{"id":"example","label":"example","source":"library","url":"example"}]}],"mix":{},"duration":1,"creditsReserved":-9007199254740991,"creditsCharged":-9007199254740991,"regenerationsLeft":-9007199254740991,"previousId":"01990000-0000-7000-8000-000000000001","episode":-9007199254740991,"output":{"videoUrl":"http://localhost:4000/example","downloadUrl":"http://localhost:4000/example","thumbnailUrl":"http://localhost:4000/example","watermarked":true,"generationId":"01990000-0000-7000-8000-000000000001","duration":1,"stems":{},"posterUrl":"http://localhost:4000/example"},"renderedAt":"2026-09-19T12:00:00.000Z","occasion":"birthday","hero":{"name":"Noura","age":-9007199254740991,"gender":"boy","message":"example","details":"example","photoUrls":["example"],"photosDeleted":true,"photosExpireAt":"2026-09-19T12:00:00.000Z"}}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/cartoon/projects/{id}","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/cartoon/projects/{id}","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/cartoon/projects/{id}","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/cartoon/projects/{id}","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/cartoon/projects/{id}","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/cartoon/projects/{id}","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/cartoon/projects/{id}","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/cartoon/projects/{id}","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/cartoon/projects/{id}","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/cartoon/projects/{id}","traceId":"request-id"}}}}}},"delete":{"operationId":"deleteCartoonProject","tags":["Cartoon"],"summary":"Delete the project (a production in progress is cancelled and its credits released); finished episodes stay in the Library","description":"Requires workspace role editor or above. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"X-CSRF-Token","in":"header","required":false,"description":"Required for cookie-authenticated mutations; returned by sign-in/sign-up.","schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"ok":{"type":"boolean"}},"required":["ok"]},"example":{"ok":true}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/cartoon/projects/{id}","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/cartoon/projects/{id}","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/cartoon/projects/{id}","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/cartoon/projects/{id}","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/cartoon/projects/{id}","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/cartoon/projects/{id}","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/cartoon/projects/{id}","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/cartoon/projects/{id}","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/cartoon/projects/{id}","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/cartoon/projects/{id}","traceId":"request-id"}}}}}}},"/v1/cartoon/projects/{id}/cast":{"post":{"operationId":"castCartoonProject","tags":["Cartoon"],"summary":"Draw a character sheet for every character (free until production; regenerations are limited)","description":"Requires workspace role editor or above. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"X-CSRF-Token","in":"header","required":false,"description":"Required for cookie-authenticated mutations; returned by sign-in/sign-up.","schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"responses":{"202":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","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)$"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"},"title":{"type":"string"},"logline":{"type":"string"},"idea":{"type":"string"},"status":{"type":"string","enum":["writing","scripted","casting","cast","storyboarding","storyboarded","producing","mixing","ready","failed"],"description":"scripted, cast and storyboarded wait for the person (director mode); one-click mode walks through them"},"stage":{"anyOf":[{"type":"string","enum":["write","sheets","storyboard","voice","render","poll","sound","mix"]},{"type":"null"}]},"progress":{"type":"number"},"error":{"description":"WRITE_FAILED, SHEETS_FAILED, STORYBOARD_FAILED, VOICE_FAILED, TOO_LONG, SCENE_FAILED, RENDER_FAILED, REMIX_FAILED; on a storyboard one-click could not produce: the refusal code (FORBIDDEN, INSUFFICIENT_CREDITS…) with errorPath","type":["string","null"]},"failedStage":{"anyOf":[{"type":"string","enum":["write","sheets","storyboard","voice","render","poll","sound","mix"]},{"type":"null"}]},"errorPath":{"description":"The plan limit that stopped one-click production (an entitlement key), for the upgrade prompt","type":["string","null"]},"departments":{"type":"object","properties":{"dialogue":{"type":"number"},"animation":{"type":"number"},"sound":{"type":"number"},"music":{"type":"number"},"mix":{"type":"number"}},"required":["dialogue","animation","sound","music","mix"],"description":"Progress 0..100 of each department while producing (the production floor)"},"mode":{"type":"string","enum":["auto","director"]},"theme":{"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)$"},"slug":{"type":"string"},"kind":{"type":"string","enum":["series","style"]},"planet":{"anyOf":[{"type":"string","enum":["action","adventure","sports","comedy","zumurruda","science","bonbon","heroes"]},{"type":"null"}]},"name":{"type":"object","properties":{"ar":{"type":"string","minLength":1},"en":{"type":"string","minLength":1}},"required":["ar","en"]},"tagline":{"type":"object","properties":{"ar":{"type":"string","minLength":1},"en":{"type":"string","minLength":1}},"required":["ar","en"]},"colors":{"type":"object","properties":{"from":{"type":"string","pattern":"^#[0-9a-fA-F]{6}$"},"to":{"type":"string","pattern":"^#[0-9a-fA-F]{6}$"},"accent":{"type":"string","pattern":"^#[0-9a-fA-F]{6}$"}},"required":["from","to","accent"]},"emoji":{"type":"string"},"jingle":{"type":"string","enum":["mystery","heroic","sports","mecha","tearjerker","pirate","power","creature","slapstick","anime","retro","family","kawaii","storybook","kids","adventure"]},"coverUrl":{"type":["string","null"]},"sampleUrl":{"type":["string","null"]},"loopUrl":{"type":["string","null"]},"dialect":{"type":"string"},"narrator":{"type":"boolean"},"ideas":{"type":"array","items":{"type":"object","properties":{"ar":{"type":"string","minLength":1},"en":{"type":"string","minLength":1}},"required":["ar","en"]}},"cast":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":40,"pattern":"^[a-z0-9-]+$"},"name":{"type":"object","properties":{"ar":{"type":"string","minLength":1},"en":{"type":"string","minLength":1}},"required":["ar","en"]},"appearance":{"type":"string","minLength":1,"maxLength":600,"description":"English description the image model draws (hair, outfit, colours, build)"},"personality":{"default":"","type":"string","maxLength":300},"gender":{"type":"string","enum":["male","female"]},"age":{"type":"string","enum":["child","teen","adult","elder"]},"voiceId":{"default":null,"description":"Default voice (Cartoon category)","anyOf":[{"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)$"},{"type":"null"}]},"voiceFx":{"default":"none","type":"string","enum":["none","chibi","giant","robot","alien","radio","echo","monster"]},"imageUrl":{"type":["string","null"]}},"required":["id","name","appearance","gender","age","imageUrl"]}},"locked":{"type":"boolean","description":"The plan does not include this theme (series need cartoonSeries)"},"order":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}},"required":["id","slug","kind","planet","name","tagline","colors","emoji","jingle","coverUrl","sampleUrl","loopUrl","dialect","narrator","ideas","cast","locked","order"]},"lengthSeconds":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"dialect":{"type":"string"},"aspectRatio":{"type":"string","enum":["9:16","16:9","1:1"]},"tier":{"type":"string"},"captions":{"type":"boolean"},"opening":{"type":"boolean"},"characters":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"role":{"type":"string"},"appearance":{"type":"string"},"personality":{"type":"string"},"gender":{"type":"string","enum":["male","female"]},"age":{"type":"string","enum":["child","teen","adult","elder"]},"voiceId":{"anyOf":[{"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)$"},{"type":"null"}]},"voiceFx":{"type":"string","enum":["none","chibi","giant","robot","alien","radio","echo","monster"]},"castId":{"type":["string","null"]},"sheetUrl":{"type":["string","null"]},"sheetStatus":{"type":"string","enum":["none","pending","ready","failed"]}},"required":["id","name","role","appearance","personality","gender","age","voiceId","voiceFx","castId","sheetUrl","sheetStatus"]}},"locations":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"ambience":{"type":"string"}},"required":["id","name","description","ambience"]}},"shots":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"locationId":{"type":["string","null"]},"camera":{"type":"string"},"action":{"type":"string","description":"English visual prompt"},"summary":{"description":"What the shot shows, one line in the episode language (the screenplay page shows it)","type":["string","null"]},"characters":{"type":"array","items":{"type":"string"}},"lines":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"speaker":{"type":"string","description":"A character id, or narrator"},"text":{"type":"string"},"emotion":{"type":"string"},"start":{"type":["number","null"]},"end":{"type":["number","null"]},"audioUrl":{"type":["string","null"]}},"required":["id","speaker","text","emotion","start","end","audioUrl"]}},"sfx":{"type":"array","items":{"type":"object","properties":{"what":{"type":"string"},"label":{"description":"Its name in the episode language","type":"string"},"tags":{"type":"array","items":{"type":"string"}},"at":{"type":"number"},"intensity":{"type":"string","enum":["soft","normal","big"]}},"required":["what","tags","at","intensity"]}},"music":{"type":"string","enum":["none","stinger","swell","tension","victory","sad","comic"]},"start":{"type":["number","null"]},"end":{"type":["number","null"]},"status":{"type":"string","enum":["pending","queued","rendering","ready","failed"]},"frameUrl":{"type":["string","null"]},"clipUrl":{"type":["string","null"]},"error":{"type":["string","null"]},"parentId":{"description":"Set on a shot split from a long one (it shares the parent still)","type":["string","null"]}},"required":["id","locationId","camera","action","summary","characters","lines","sfx","music","start","end","status","frameUrl","clipUrl","error","parentId"]}},"song":{"anyOf":[{"type":"object","properties":{"lyrics":{"type":"string"}},"required":["lyrics"]},{"type":"null"}]},"cues":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"lane":{"type":"string","enum":["sfx","foley","ambience","music"]},"label":{"type":"string"},"at":{"type":"number"},"duration":{"type":"number"},"gain":{"type":"number","description":"dB"},"pan":{"type":"number"},"muted":{"type":"boolean"},"source":{"type":"string","enum":["library","generated","synth"]},"soundId":{"anyOf":[{"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)$"},{"type":"null"}]},"url":{"type":["string","null"]},"shotId":{"type":["string","null"]},"generating":{"type":"boolean","description":"A new take is being made (regenerate)"},"alternatives":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"label":{"type":"string"},"source":{"type":"string","enum":["library","generated","synth"]},"url":{"type":["string","null"]}},"required":["id","label","source","url"]}}},"required":["id","lane","label","at","duration","gain","pan","muted","source","soundId","url","shotId","generating","alternatives"]}},"mix":{"type":"object","propertyNames":{"type":"string","enum":["dialogue","sfx","foley","ambience","music"]},"additionalProperties":{"type":"object","properties":{"gain":{"type":"number","minimum":-30,"maximum":12},"muted":{"type":"boolean"}},"required":["gain","muted"]},"required":["dialogue","sfx","foley","ambience","music"]},"duration":{"type":"number"},"creditsReserved":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"creditsCharged":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"regenerationsLeft":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"previousId":{"anyOf":[{"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)$"},{"type":"null"}]},"episode":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"output":{"anyOf":[{"type":"object","properties":{"videoUrl":{"type":["string","null"]},"downloadUrl":{"type":["string","null"]},"thumbnailUrl":{"type":["string","null"]},"watermarked":{"type":"boolean"},"generationId":{"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)$"},"duration":{"type":"number"},"stems":{"anyOf":[{"type":"object","propertyNames":{"type":"string","enum":["dialogue","sfx","foley","ambience","music"]},"additionalProperties":{"type":["string","null"]},"required":["dialogue","sfx","foley","ambience","music"]},{"type":"null"}],"description":"Signed WAV per lane (entitlement cartoonStems)"},"posterUrl":{"type":["string","null"]}},"required":["videoUrl","downloadUrl","thumbnailUrl","watermarked","generationId","duration","stems","posterUrl"]},{"type":"null"}]},"renderedAt":{"type":["string","null"]},"occasion":{"anyOf":[{"type":"string","enum":["birthday"]},{"type":"null"}],"description":"Set on a Birthday Hero video"},"hero":{"anyOf":[{"type":"object","properties":{"name":{"type":"string"},"age":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"gender":{"type":"string","enum":["boy","girl"]},"message":{"type":"string"},"details":{"type":"string"},"photoUrls":{"type":"array","items":{"type":"string"},"description":"Signed URLs of the uploaded photos (empty once deleted)"},"photosDeleted":{"type":"boolean"},"photosExpireAt":{"type":["string","null"]}},"required":["name","age","gender","message","details","photoUrls","photosDeleted","photosExpireAt"]},{"type":"null"}],"description":"The birthday child (Birthday Hero videos only)"}},"required":["id","createdAt","updatedAt","title","logline","idea","status","stage","progress","error","failedStage","errorPath","departments","mode","theme","lengthSeconds","dialect","aspectRatio","tier","captions","opening","characters","locations","shots","song","cues","mix","duration","creditsReserved","creditsCharged","regenerationsLeft","previousId","episode","output","renderedAt","occasion","hero"]},"example":{"id":"01990000-0000-7000-8000-000000000001","createdAt":"2026-09-19T12:00:00.000Z","updatedAt":"2026-09-19T12:00:00.000Z","title":"example","logline":"example","idea":"example","status":"writing","stage":"write","progress":1,"error":"example","failedStage":"write","errorPath":"example","departments":{"dialogue":1,"animation":1,"sound":1,"music":1,"mix":1},"mode":"auto","theme":{"id":"01990000-0000-7000-8000-000000000001","slug":"example","kind":"series","planet":"action","name":{"ar":"مثال","en":"example"},"tagline":{"ar":"مثال","en":"example"},"colors":{"from":"example","to":"example","accent":"example"},"emoji":"example","jingle":"mystery","coverUrl":"http://localhost:4000/example","sampleUrl":"http://localhost:4000/example","loopUrl":"http://localhost:4000/example","dialect":"ar-SA","narrator":true,"ideas":[{"ar":"مثال","en":"example"}],"cast":[{"id":"example","name":{"ar":"مثال","en":"example"},"appearance":"example","personality":"","gender":"male","age":"child","voiceId":null,"voiceFx":"none","imageUrl":"http://localhost:4000/example"}],"locked":true,"order":-9007199254740991},"lengthSeconds":-9007199254740991,"dialect":"ar-SA","aspectRatio":"9:16","tier":"example","captions":true,"opening":true,"characters":[{"id":"example","name":"Noura","role":"example","appearance":"example","personality":"example","gender":"male","age":"child","voiceId":"01990000-0000-7000-8000-000000000001","voiceFx":"none","castId":"example","sheetUrl":"http://localhost:4000/example","sheetStatus":"none"}],"locations":[{"id":"example","name":"Noura","description":"example","ambience":"example"}],"shots":[{"id":"example","locationId":"example","camera":"example","action":"example","summary":"example","characters":["example"],"lines":[{"id":"example","speaker":"example","text":"مرحباً بك في فوكلا.","emotion":"example","start":"example","end":"example","audioUrl":"http://localhost:4000/example"}],"sfx":[{"what":"example","label":"example","tags":["example"],"at":1,"intensity":"soft"}],"music":"none","start":"example","end":"example","status":"pending","frameUrl":"http://localhost:4000/example","clipUrl":"http://localhost:4000/example","error":"example","parentId":"example"}],"song":{"lyrics":"example"},"cues":[{"id":"example","lane":"sfx","label":"example","at":1,"duration":1,"gain":1,"pan":1,"muted":true,"source":"library","soundId":"01990000-0000-7000-8000-000000000001","url":"example","shotId":"example","generating":true,"alternatives":[{"id":"example","label":"example","source":"library","url":"example"}]}],"mix":{},"duration":1,"creditsReserved":-9007199254740991,"creditsCharged":-9007199254740991,"regenerationsLeft":-9007199254740991,"previousId":"01990000-0000-7000-8000-000000000001","episode":-9007199254740991,"output":{"videoUrl":"http://localhost:4000/example","downloadUrl":"http://localhost:4000/example","thumbnailUrl":"http://localhost:4000/example","watermarked":true,"generationId":"01990000-0000-7000-8000-000000000001","duration":1,"stems":{},"posterUrl":"http://localhost:4000/example"},"renderedAt":"2026-09-19T12:00:00.000Z","occasion":"birthday","hero":{"name":"Noura","age":-9007199254740991,"gender":"boy","message":"example","details":"example","photoUrls":["example"],"photosDeleted":true,"photosExpireAt":"2026-09-19T12:00:00.000Z"}}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/cartoon/projects/{id}/cast","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/cartoon/projects/{id}/cast","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/cartoon/projects/{id}/cast","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/cartoon/projects/{id}/cast","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/cartoon/projects/{id}/cast","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/cartoon/projects/{id}/cast","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/cartoon/projects/{id}/cast","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/cartoon/projects/{id}/cast","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/cartoon/projects/{id}/cast","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/cartoon/projects/{id}/cast","traceId":"request-id"}}}}}}},"/v1/cartoon/projects/{id}/characters/{characterId}/regenerate":{"post":{"operationId":"regenerateCartoonCharacter","tags":["Cartoon"],"summary":"Draw one character sheet again, optionally from a new description","description":"Requires workspace role editor or above. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"characterId","in":"path","required":true,"schema":{"type":"string"}},{"name":"X-CSRF-Token","in":"header","required":false,"description":"Required for cookie-authenticated mutations; returned by sign-in/sign-up.","schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"appearance":{"type":"string","minLength":3,"maxLength":600}}},"example":{"appearance":"example"}}}},"responses":{"202":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","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)$"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"},"title":{"type":"string"},"logline":{"type":"string"},"idea":{"type":"string"},"status":{"type":"string","enum":["writing","scripted","casting","cast","storyboarding","storyboarded","producing","mixing","ready","failed"],"description":"scripted, cast and storyboarded wait for the person (director mode); one-click mode walks through them"},"stage":{"anyOf":[{"type":"string","enum":["write","sheets","storyboard","voice","render","poll","sound","mix"]},{"type":"null"}]},"progress":{"type":"number"},"error":{"description":"WRITE_FAILED, SHEETS_FAILED, STORYBOARD_FAILED, VOICE_FAILED, TOO_LONG, SCENE_FAILED, RENDER_FAILED, REMIX_FAILED; on a storyboard one-click could not produce: the refusal code (FORBIDDEN, INSUFFICIENT_CREDITS…) with errorPath","type":["string","null"]},"failedStage":{"anyOf":[{"type":"string","enum":["write","sheets","storyboard","voice","render","poll","sound","mix"]},{"type":"null"}]},"errorPath":{"description":"The plan limit that stopped one-click production (an entitlement key), for the upgrade prompt","type":["string","null"]},"departments":{"type":"object","properties":{"dialogue":{"type":"number"},"animation":{"type":"number"},"sound":{"type":"number"},"music":{"type":"number"},"mix":{"type":"number"}},"required":["dialogue","animation","sound","music","mix"],"description":"Progress 0..100 of each department while producing (the production floor)"},"mode":{"type":"string","enum":["auto","director"]},"theme":{"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)$"},"slug":{"type":"string"},"kind":{"type":"string","enum":["series","style"]},"planet":{"anyOf":[{"type":"string","enum":["action","adventure","sports","comedy","zumurruda","science","bonbon","heroes"]},{"type":"null"}]},"name":{"type":"object","properties":{"ar":{"type":"string","minLength":1},"en":{"type":"string","minLength":1}},"required":["ar","en"]},"tagline":{"type":"object","properties":{"ar":{"type":"string","minLength":1},"en":{"type":"string","minLength":1}},"required":["ar","en"]},"colors":{"type":"object","properties":{"from":{"type":"string","pattern":"^#[0-9a-fA-F]{6}$"},"to":{"type":"string","pattern":"^#[0-9a-fA-F]{6}$"},"accent":{"type":"string","pattern":"^#[0-9a-fA-F]{6}$"}},"required":["from","to","accent"]},"emoji":{"type":"string"},"jingle":{"type":"string","enum":["mystery","heroic","sports","mecha","tearjerker","pirate","power","creature","slapstick","anime","retro","family","kawaii","storybook","kids","adventure"]},"coverUrl":{"type":["string","null"]},"sampleUrl":{"type":["string","null"]},"loopUrl":{"type":["string","null"]},"dialect":{"type":"string"},"narrator":{"type":"boolean"},"ideas":{"type":"array","items":{"type":"object","properties":{"ar":{"type":"string","minLength":1},"en":{"type":"string","minLength":1}},"required":["ar","en"]}},"cast":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":40,"pattern":"^[a-z0-9-]+$"},"name":{"type":"object","properties":{"ar":{"type":"string","minLength":1},"en":{"type":"string","minLength":1}},"required":["ar","en"]},"appearance":{"type":"string","minLength":1,"maxLength":600,"description":"English description the image model draws (hair, outfit, colours, build)"},"personality":{"default":"","type":"string","maxLength":300},"gender":{"type":"string","enum":["male","female"]},"age":{"type":"string","enum":["child","teen","adult","elder"]},"voiceId":{"default":null,"description":"Default voice (Cartoon category)","anyOf":[{"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)$"},{"type":"null"}]},"voiceFx":{"default":"none","type":"string","enum":["none","chibi","giant","robot","alien","radio","echo","monster"]},"imageUrl":{"type":["string","null"]}},"required":["id","name","appearance","gender","age","imageUrl"]}},"locked":{"type":"boolean","description":"The plan does not include this theme (series need cartoonSeries)"},"order":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}},"required":["id","slug","kind","planet","name","tagline","colors","emoji","jingle","coverUrl","sampleUrl","loopUrl","dialect","narrator","ideas","cast","locked","order"]},"lengthSeconds":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"dialect":{"type":"string"},"aspectRatio":{"type":"string","enum":["9:16","16:9","1:1"]},"tier":{"type":"string"},"captions":{"type":"boolean"},"opening":{"type":"boolean"},"characters":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"role":{"type":"string"},"appearance":{"type":"string"},"personality":{"type":"string"},"gender":{"type":"string","enum":["male","female"]},"age":{"type":"string","enum":["child","teen","adult","elder"]},"voiceId":{"anyOf":[{"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)$"},{"type":"null"}]},"voiceFx":{"type":"string","enum":["none","chibi","giant","robot","alien","radio","echo","monster"]},"castId":{"type":["string","null"]},"sheetUrl":{"type":["string","null"]},"sheetStatus":{"type":"string","enum":["none","pending","ready","failed"]}},"required":["id","name","role","appearance","personality","gender","age","voiceId","voiceFx","castId","sheetUrl","sheetStatus"]}},"locations":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"ambience":{"type":"string"}},"required":["id","name","description","ambience"]}},"shots":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"locationId":{"type":["string","null"]},"camera":{"type":"string"},"action":{"type":"string","description":"English visual prompt"},"summary":{"description":"What the shot shows, one line in the episode language (the screenplay page shows it)","type":["string","null"]},"characters":{"type":"array","items":{"type":"string"}},"lines":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"speaker":{"type":"string","description":"A character id, or narrator"},"text":{"type":"string"},"emotion":{"type":"string"},"start":{"type":["number","null"]},"end":{"type":["number","null"]},"audioUrl":{"type":["string","null"]}},"required":["id","speaker","text","emotion","start","end","audioUrl"]}},"sfx":{"type":"array","items":{"type":"object","properties":{"what":{"type":"string"},"label":{"description":"Its name in the episode language","type":"string"},"tags":{"type":"array","items":{"type":"string"}},"at":{"type":"number"},"intensity":{"type":"string","enum":["soft","normal","big"]}},"required":["what","tags","at","intensity"]}},"music":{"type":"string","enum":["none","stinger","swell","tension","victory","sad","comic"]},"start":{"type":["number","null"]},"end":{"type":["number","null"]},"status":{"type":"string","enum":["pending","queued","rendering","ready","failed"]},"frameUrl":{"type":["string","null"]},"clipUrl":{"type":["string","null"]},"error":{"type":["string","null"]},"parentId":{"description":"Set on a shot split from a long one (it shares the parent still)","type":["string","null"]}},"required":["id","locationId","camera","action","summary","characters","lines","sfx","music","start","end","status","frameUrl","clipUrl","error","parentId"]}},"song":{"anyOf":[{"type":"object","properties":{"lyrics":{"type":"string"}},"required":["lyrics"]},{"type":"null"}]},"cues":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"lane":{"type":"string","enum":["sfx","foley","ambience","music"]},"label":{"type":"string"},"at":{"type":"number"},"duration":{"type":"number"},"gain":{"type":"number","description":"dB"},"pan":{"type":"number"},"muted":{"type":"boolean"},"source":{"type":"string","enum":["library","generated","synth"]},"soundId":{"anyOf":[{"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)$"},{"type":"null"}]},"url":{"type":["string","null"]},"shotId":{"type":["string","null"]},"generating":{"type":"boolean","description":"A new take is being made (regenerate)"},"alternatives":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"label":{"type":"string"},"source":{"type":"string","enum":["library","generated","synth"]},"url":{"type":["string","null"]}},"required":["id","label","source","url"]}}},"required":["id","lane","label","at","duration","gain","pan","muted","source","soundId","url","shotId","generating","alternatives"]}},"mix":{"type":"object","propertyNames":{"type":"string","enum":["dialogue","sfx","foley","ambience","music"]},"additionalProperties":{"type":"object","properties":{"gain":{"type":"number","minimum":-30,"maximum":12},"muted":{"type":"boolean"}},"required":["gain","muted"]},"required":["dialogue","sfx","foley","ambience","music"]},"duration":{"type":"number"},"creditsReserved":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"creditsCharged":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"regenerationsLeft":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"previousId":{"anyOf":[{"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)$"},{"type":"null"}]},"episode":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"output":{"anyOf":[{"type":"object","properties":{"videoUrl":{"type":["string","null"]},"downloadUrl":{"type":["string","null"]},"thumbnailUrl":{"type":["string","null"]},"watermarked":{"type":"boolean"},"generationId":{"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)$"},"duration":{"type":"number"},"stems":{"anyOf":[{"type":"object","propertyNames":{"type":"string","enum":["dialogue","sfx","foley","ambience","music"]},"additionalProperties":{"type":["string","null"]},"required":["dialogue","sfx","foley","ambience","music"]},{"type":"null"}],"description":"Signed WAV per lane (entitlement cartoonStems)"},"posterUrl":{"type":["string","null"]}},"required":["videoUrl","downloadUrl","thumbnailUrl","watermarked","generationId","duration","stems","posterUrl"]},{"type":"null"}]},"renderedAt":{"type":["string","null"]},"occasion":{"anyOf":[{"type":"string","enum":["birthday"]},{"type":"null"}],"description":"Set on a Birthday Hero video"},"hero":{"anyOf":[{"type":"object","properties":{"name":{"type":"string"},"age":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"gender":{"type":"string","enum":["boy","girl"]},"message":{"type":"string"},"details":{"type":"string"},"photoUrls":{"type":"array","items":{"type":"string"},"description":"Signed URLs of the uploaded photos (empty once deleted)"},"photosDeleted":{"type":"boolean"},"photosExpireAt":{"type":["string","null"]}},"required":["name","age","gender","message","details","photoUrls","photosDeleted","photosExpireAt"]},{"type":"null"}],"description":"The birthday child (Birthday Hero videos only)"}},"required":["id","createdAt","updatedAt","title","logline","idea","status","stage","progress","error","failedStage","errorPath","departments","mode","theme","lengthSeconds","dialect","aspectRatio","tier","captions","opening","characters","locations","shots","song","cues","mix","duration","creditsReserved","creditsCharged","regenerationsLeft","previousId","episode","output","renderedAt","occasion","hero"]},"example":{"id":"01990000-0000-7000-8000-000000000001","createdAt":"2026-09-19T12:00:00.000Z","updatedAt":"2026-09-19T12:00:00.000Z","title":"example","logline":"example","idea":"example","status":"writing","stage":"write","progress":1,"error":"example","failedStage":"write","errorPath":"example","departments":{"dialogue":1,"animation":1,"sound":1,"music":1,"mix":1},"mode":"auto","theme":{"id":"01990000-0000-7000-8000-000000000001","slug":"example","kind":"series","planet":"action","name":{"ar":"مثال","en":"example"},"tagline":{"ar":"مثال","en":"example"},"colors":{"from":"example","to":"example","accent":"example"},"emoji":"example","jingle":"mystery","coverUrl":"http://localhost:4000/example","sampleUrl":"http://localhost:4000/example","loopUrl":"http://localhost:4000/example","dialect":"ar-SA","narrator":true,"ideas":[{"ar":"مثال","en":"example"}],"cast":[{"id":"example","name":{"ar":"مثال","en":"example"},"appearance":"example","personality":"","gender":"male","age":"child","voiceId":null,"voiceFx":"none","imageUrl":"http://localhost:4000/example"}],"locked":true,"order":-9007199254740991},"lengthSeconds":-9007199254740991,"dialect":"ar-SA","aspectRatio":"9:16","tier":"example","captions":true,"opening":true,"characters":[{"id":"example","name":"Noura","role":"example","appearance":"example","personality":"example","gender":"male","age":"child","voiceId":"01990000-0000-7000-8000-000000000001","voiceFx":"none","castId":"example","sheetUrl":"http://localhost:4000/example","sheetStatus":"none"}],"locations":[{"id":"example","name":"Noura","description":"example","ambience":"example"}],"shots":[{"id":"example","locationId":"example","camera":"example","action":"example","summary":"example","characters":["example"],"lines":[{"id":"example","speaker":"example","text":"مرحباً بك في فوكلا.","emotion":"example","start":"example","end":"example","audioUrl":"http://localhost:4000/example"}],"sfx":[{"what":"example","label":"example","tags":["example"],"at":1,"intensity":"soft"}],"music":"none","start":"example","end":"example","status":"pending","frameUrl":"http://localhost:4000/example","clipUrl":"http://localhost:4000/example","error":"example","parentId":"example"}],"song":{"lyrics":"example"},"cues":[{"id":"example","lane":"sfx","label":"example","at":1,"duration":1,"gain":1,"pan":1,"muted":true,"source":"library","soundId":"01990000-0000-7000-8000-000000000001","url":"example","shotId":"example","generating":true,"alternatives":[{"id":"example","label":"example","source":"library","url":"example"}]}],"mix":{},"duration":1,"creditsReserved":-9007199254740991,"creditsCharged":-9007199254740991,"regenerationsLeft":-9007199254740991,"previousId":"01990000-0000-7000-8000-000000000001","episode":-9007199254740991,"output":{"videoUrl":"http://localhost:4000/example","downloadUrl":"http://localhost:4000/example","thumbnailUrl":"http://localhost:4000/example","watermarked":true,"generationId":"01990000-0000-7000-8000-000000000001","duration":1,"stems":{},"posterUrl":"http://localhost:4000/example"},"renderedAt":"2026-09-19T12:00:00.000Z","occasion":"birthday","hero":{"name":"Noura","age":-9007199254740991,"gender":"boy","message":"example","details":"example","photoUrls":["example"],"photosDeleted":true,"photosExpireAt":"2026-09-19T12:00:00.000Z"}}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/cartoon/projects/{id}/characters/{characterId}/regenerate","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/cartoon/projects/{id}/characters/{characterId}/regenerate","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/cartoon/projects/{id}/characters/{characterId}/regenerate","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/cartoon/projects/{id}/characters/{characterId}/regenerate","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/cartoon/projects/{id}/characters/{characterId}/regenerate","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/cartoon/projects/{id}/characters/{characterId}/regenerate","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/cartoon/projects/{id}/characters/{characterId}/regenerate","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/cartoon/projects/{id}/characters/{characterId}/regenerate","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/cartoon/projects/{id}/characters/{characterId}/regenerate","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/cartoon/projects/{id}/characters/{characterId}/regenerate","traceId":"request-id"}}}}}}},"/v1/cartoon/projects/{id}/storyboard":{"post":{"operationId":"storyboardCartoonProject","tags":["Cartoon"],"summary":"Draw one still per shot from the character sheets","description":"Requires workspace role editor or above. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"X-CSRF-Token","in":"header","required":false,"description":"Required for cookie-authenticated mutations; returned by sign-in/sign-up.","schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"responses":{"202":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","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)$"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"},"title":{"type":"string"},"logline":{"type":"string"},"idea":{"type":"string"},"status":{"type":"string","enum":["writing","scripted","casting","cast","storyboarding","storyboarded","producing","mixing","ready","failed"],"description":"scripted, cast and storyboarded wait for the person (director mode); one-click mode walks through them"},"stage":{"anyOf":[{"type":"string","enum":["write","sheets","storyboard","voice","render","poll","sound","mix"]},{"type":"null"}]},"progress":{"type":"number"},"error":{"description":"WRITE_FAILED, SHEETS_FAILED, STORYBOARD_FAILED, VOICE_FAILED, TOO_LONG, SCENE_FAILED, RENDER_FAILED, REMIX_FAILED; on a storyboard one-click could not produce: the refusal code (FORBIDDEN, INSUFFICIENT_CREDITS…) with errorPath","type":["string","null"]},"failedStage":{"anyOf":[{"type":"string","enum":["write","sheets","storyboard","voice","render","poll","sound","mix"]},{"type":"null"}]},"errorPath":{"description":"The plan limit that stopped one-click production (an entitlement key), for the upgrade prompt","type":["string","null"]},"departments":{"type":"object","properties":{"dialogue":{"type":"number"},"animation":{"type":"number"},"sound":{"type":"number"},"music":{"type":"number"},"mix":{"type":"number"}},"required":["dialogue","animation","sound","music","mix"],"description":"Progress 0..100 of each department while producing (the production floor)"},"mode":{"type":"string","enum":["auto","director"]},"theme":{"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)$"},"slug":{"type":"string"},"kind":{"type":"string","enum":["series","style"]},"planet":{"anyOf":[{"type":"string","enum":["action","adventure","sports","comedy","zumurruda","science","bonbon","heroes"]},{"type":"null"}]},"name":{"type":"object","properties":{"ar":{"type":"string","minLength":1},"en":{"type":"string","minLength":1}},"required":["ar","en"]},"tagline":{"type":"object","properties":{"ar":{"type":"string","minLength":1},"en":{"type":"string","minLength":1}},"required":["ar","en"]},"colors":{"type":"object","properties":{"from":{"type":"string","pattern":"^#[0-9a-fA-F]{6}$"},"to":{"type":"string","pattern":"^#[0-9a-fA-F]{6}$"},"accent":{"type":"string","pattern":"^#[0-9a-fA-F]{6}$"}},"required":["from","to","accent"]},"emoji":{"type":"string"},"jingle":{"type":"string","enum":["mystery","heroic","sports","mecha","tearjerker","pirate","power","creature","slapstick","anime","retro","family","kawaii","storybook","kids","adventure"]},"coverUrl":{"type":["string","null"]},"sampleUrl":{"type":["string","null"]},"loopUrl":{"type":["string","null"]},"dialect":{"type":"string"},"narrator":{"type":"boolean"},"ideas":{"type":"array","items":{"type":"object","properties":{"ar":{"type":"string","minLength":1},"en":{"type":"string","minLength":1}},"required":["ar","en"]}},"cast":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":40,"pattern":"^[a-z0-9-]+$"},"name":{"type":"object","properties":{"ar":{"type":"string","minLength":1},"en":{"type":"string","minLength":1}},"required":["ar","en"]},"appearance":{"type":"string","minLength":1,"maxLength":600,"description":"English description the image model draws (hair, outfit, colours, build)"},"personality":{"default":"","type":"string","maxLength":300},"gender":{"type":"string","enum":["male","female"]},"age":{"type":"string","enum":["child","teen","adult","elder"]},"voiceId":{"default":null,"description":"Default voice (Cartoon category)","anyOf":[{"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)$"},{"type":"null"}]},"voiceFx":{"default":"none","type":"string","enum":["none","chibi","giant","robot","alien","radio","echo","monster"]},"imageUrl":{"type":["string","null"]}},"required":["id","name","appearance","gender","age","imageUrl"]}},"locked":{"type":"boolean","description":"The plan does not include this theme (series need cartoonSeries)"},"order":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}},"required":["id","slug","kind","planet","name","tagline","colors","emoji","jingle","coverUrl","sampleUrl","loopUrl","dialect","narrator","ideas","cast","locked","order"]},"lengthSeconds":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"dialect":{"type":"string"},"aspectRatio":{"type":"string","enum":["9:16","16:9","1:1"]},"tier":{"type":"string"},"captions":{"type":"boolean"},"opening":{"type":"boolean"},"characters":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"role":{"type":"string"},"appearance":{"type":"string"},"personality":{"type":"string"},"gender":{"type":"string","enum":["male","female"]},"age":{"type":"string","enum":["child","teen","adult","elder"]},"voiceId":{"anyOf":[{"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)$"},{"type":"null"}]},"voiceFx":{"type":"string","enum":["none","chibi","giant","robot","alien","radio","echo","monster"]},"castId":{"type":["string","null"]},"sheetUrl":{"type":["string","null"]},"sheetStatus":{"type":"string","enum":["none","pending","ready","failed"]}},"required":["id","name","role","appearance","personality","gender","age","voiceId","voiceFx","castId","sheetUrl","sheetStatus"]}},"locations":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"ambience":{"type":"string"}},"required":["id","name","description","ambience"]}},"shots":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"locationId":{"type":["string","null"]},"camera":{"type":"string"},"action":{"type":"string","description":"English visual prompt"},"summary":{"description":"What the shot shows, one line in the episode language (the screenplay page shows it)","type":["string","null"]},"characters":{"type":"array","items":{"type":"string"}},"lines":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"speaker":{"type":"string","description":"A character id, or narrator"},"text":{"type":"string"},"emotion":{"type":"string"},"start":{"type":["number","null"]},"end":{"type":["number","null"]},"audioUrl":{"type":["string","null"]}},"required":["id","speaker","text","emotion","start","end","audioUrl"]}},"sfx":{"type":"array","items":{"type":"object","properties":{"what":{"type":"string"},"label":{"description":"Its name in the episode language","type":"string"},"tags":{"type":"array","items":{"type":"string"}},"at":{"type":"number"},"intensity":{"type":"string","enum":["soft","normal","big"]}},"required":["what","tags","at","intensity"]}},"music":{"type":"string","enum":["none","stinger","swell","tension","victory","sad","comic"]},"start":{"type":["number","null"]},"end":{"type":["number","null"]},"status":{"type":"string","enum":["pending","queued","rendering","ready","failed"]},"frameUrl":{"type":["string","null"]},"clipUrl":{"type":["string","null"]},"error":{"type":["string","null"]},"parentId":{"description":"Set on a shot split from a long one (it shares the parent still)","type":["string","null"]}},"required":["id","locationId","camera","action","summary","characters","lines","sfx","music","start","end","status","frameUrl","clipUrl","error","parentId"]}},"song":{"anyOf":[{"type":"object","properties":{"lyrics":{"type":"string"}},"required":["lyrics"]},{"type":"null"}]},"cues":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"lane":{"type":"string","enum":["sfx","foley","ambience","music"]},"label":{"type":"string"},"at":{"type":"number"},"duration":{"type":"number"},"gain":{"type":"number","description":"dB"},"pan":{"type":"number"},"muted":{"type":"boolean"},"source":{"type":"string","enum":["library","generated","synth"]},"soundId":{"anyOf":[{"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)$"},{"type":"null"}]},"url":{"type":["string","null"]},"shotId":{"type":["string","null"]},"generating":{"type":"boolean","description":"A new take is being made (regenerate)"},"alternatives":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"label":{"type":"string"},"source":{"type":"string","enum":["library","generated","synth"]},"url":{"type":["string","null"]}},"required":["id","label","source","url"]}}},"required":["id","lane","label","at","duration","gain","pan","muted","source","soundId","url","shotId","generating","alternatives"]}},"mix":{"type":"object","propertyNames":{"type":"string","enum":["dialogue","sfx","foley","ambience","music"]},"additionalProperties":{"type":"object","properties":{"gain":{"type":"number","minimum":-30,"maximum":12},"muted":{"type":"boolean"}},"required":["gain","muted"]},"required":["dialogue","sfx","foley","ambience","music"]},"duration":{"type":"number"},"creditsReserved":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"creditsCharged":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"regenerationsLeft":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"previousId":{"anyOf":[{"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)$"},{"type":"null"}]},"episode":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"output":{"anyOf":[{"type":"object","properties":{"videoUrl":{"type":["string","null"]},"downloadUrl":{"type":["string","null"]},"thumbnailUrl":{"type":["string","null"]},"watermarked":{"type":"boolean"},"generationId":{"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)$"},"duration":{"type":"number"},"stems":{"anyOf":[{"type":"object","propertyNames":{"type":"string","enum":["dialogue","sfx","foley","ambience","music"]},"additionalProperties":{"type":["string","null"]},"required":["dialogue","sfx","foley","ambience","music"]},{"type":"null"}],"description":"Signed WAV per lane (entitlement cartoonStems)"},"posterUrl":{"type":["string","null"]}},"required":["videoUrl","downloadUrl","thumbnailUrl","watermarked","generationId","duration","stems","posterUrl"]},{"type":"null"}]},"renderedAt":{"type":["string","null"]},"occasion":{"anyOf":[{"type":"string","enum":["birthday"]},{"type":"null"}],"description":"Set on a Birthday Hero video"},"hero":{"anyOf":[{"type":"object","properties":{"name":{"type":"string"},"age":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"gender":{"type":"string","enum":["boy","girl"]},"message":{"type":"string"},"details":{"type":"string"},"photoUrls":{"type":"array","items":{"type":"string"},"description":"Signed URLs of the uploaded photos (empty once deleted)"},"photosDeleted":{"type":"boolean"},"photosExpireAt":{"type":["string","null"]}},"required":["name","age","gender","message","details","photoUrls","photosDeleted","photosExpireAt"]},{"type":"null"}],"description":"The birthday child (Birthday Hero videos only)"}},"required":["id","createdAt","updatedAt","title","logline","idea","status","stage","progress","error","failedStage","errorPath","departments","mode","theme","lengthSeconds","dialect","aspectRatio","tier","captions","opening","characters","locations","shots","song","cues","mix","duration","creditsReserved","creditsCharged","regenerationsLeft","previousId","episode","output","renderedAt","occasion","hero"]},"example":{"id":"01990000-0000-7000-8000-000000000001","createdAt":"2026-09-19T12:00:00.000Z","updatedAt":"2026-09-19T12:00:00.000Z","title":"example","logline":"example","idea":"example","status":"writing","stage":"write","progress":1,"error":"example","failedStage":"write","errorPath":"example","departments":{"dialogue":1,"animation":1,"sound":1,"music":1,"mix":1},"mode":"auto","theme":{"id":"01990000-0000-7000-8000-000000000001","slug":"example","kind":"series","planet":"action","name":{"ar":"مثال","en":"example"},"tagline":{"ar":"مثال","en":"example"},"colors":{"from":"example","to":"example","accent":"example"},"emoji":"example","jingle":"mystery","coverUrl":"http://localhost:4000/example","sampleUrl":"http://localhost:4000/example","loopUrl":"http://localhost:4000/example","dialect":"ar-SA","narrator":true,"ideas":[{"ar":"مثال","en":"example"}],"cast":[{"id":"example","name":{"ar":"مثال","en":"example"},"appearance":"example","personality":"","gender":"male","age":"child","voiceId":null,"voiceFx":"none","imageUrl":"http://localhost:4000/example"}],"locked":true,"order":-9007199254740991},"lengthSeconds":-9007199254740991,"dialect":"ar-SA","aspectRatio":"9:16","tier":"example","captions":true,"opening":true,"characters":[{"id":"example","name":"Noura","role":"example","appearance":"example","personality":"example","gender":"male","age":"child","voiceId":"01990000-0000-7000-8000-000000000001","voiceFx":"none","castId":"example","sheetUrl":"http://localhost:4000/example","sheetStatus":"none"}],"locations":[{"id":"example","name":"Noura","description":"example","ambience":"example"}],"shots":[{"id":"example","locationId":"example","camera":"example","action":"example","summary":"example","characters":["example"],"lines":[{"id":"example","speaker":"example","text":"مرحباً بك في فوكلا.","emotion":"example","start":"example","end":"example","audioUrl":"http://localhost:4000/example"}],"sfx":[{"what":"example","label":"example","tags":["example"],"at":1,"intensity":"soft"}],"music":"none","start":"example","end":"example","status":"pending","frameUrl":"http://localhost:4000/example","clipUrl":"http://localhost:4000/example","error":"example","parentId":"example"}],"song":{"lyrics":"example"},"cues":[{"id":"example","lane":"sfx","label":"example","at":1,"duration":1,"gain":1,"pan":1,"muted":true,"source":"library","soundId":"01990000-0000-7000-8000-000000000001","url":"example","shotId":"example","generating":true,"alternatives":[{"id":"example","label":"example","source":"library","url":"example"}]}],"mix":{},"duration":1,"creditsReserved":-9007199254740991,"creditsCharged":-9007199254740991,"regenerationsLeft":-9007199254740991,"previousId":"01990000-0000-7000-8000-000000000001","episode":-9007199254740991,"output":{"videoUrl":"http://localhost:4000/example","downloadUrl":"http://localhost:4000/example","thumbnailUrl":"http://localhost:4000/example","watermarked":true,"generationId":"01990000-0000-7000-8000-000000000001","duration":1,"stems":{},"posterUrl":"http://localhost:4000/example"},"renderedAt":"2026-09-19T12:00:00.000Z","occasion":"birthday","hero":{"name":"Noura","age":-9007199254740991,"gender":"boy","message":"example","details":"example","photoUrls":["example"],"photosDeleted":true,"photosExpireAt":"2026-09-19T12:00:00.000Z"}}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/cartoon/projects/{id}/storyboard","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/cartoon/projects/{id}/storyboard","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/cartoon/projects/{id}/storyboard","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/cartoon/projects/{id}/storyboard","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/cartoon/projects/{id}/storyboard","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/cartoon/projects/{id}/storyboard","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/cartoon/projects/{id}/storyboard","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/cartoon/projects/{id}/storyboard","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/cartoon/projects/{id}/storyboard","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/cartoon/projects/{id}/storyboard","traceId":"request-id"}}}}}}},"/v1/cartoon/projects/{id}/shots/{shotId}/regenerate":{"post":{"operationId":"regenerateCartoonShot","tags":["Cartoon"],"summary":"Draw one storyboard still again, optionally with a new action","description":"Requires workspace role editor or above. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"shotId","in":"path","required":true,"schema":{"type":"string"}},{"name":"X-CSRF-Token","in":"header","required":false,"description":"Required for cookie-authenticated mutations; returned by sign-in/sign-up.","schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"action":{"type":"string","minLength":3,"maxLength":1500}}},"example":{"action":"example"}}}},"responses":{"202":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","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)$"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"},"title":{"type":"string"},"logline":{"type":"string"},"idea":{"type":"string"},"status":{"type":"string","enum":["writing","scripted","casting","cast","storyboarding","storyboarded","producing","mixing","ready","failed"],"description":"scripted, cast and storyboarded wait for the person (director mode); one-click mode walks through them"},"stage":{"anyOf":[{"type":"string","enum":["write","sheets","storyboard","voice","render","poll","sound","mix"]},{"type":"null"}]},"progress":{"type":"number"},"error":{"description":"WRITE_FAILED, SHEETS_FAILED, STORYBOARD_FAILED, VOICE_FAILED, TOO_LONG, SCENE_FAILED, RENDER_FAILED, REMIX_FAILED; on a storyboard one-click could not produce: the refusal code (FORBIDDEN, INSUFFICIENT_CREDITS…) with errorPath","type":["string","null"]},"failedStage":{"anyOf":[{"type":"string","enum":["write","sheets","storyboard","voice","render","poll","sound","mix"]},{"type":"null"}]},"errorPath":{"description":"The plan limit that stopped one-click production (an entitlement key), for the upgrade prompt","type":["string","null"]},"departments":{"type":"object","properties":{"dialogue":{"type":"number"},"animation":{"type":"number"},"sound":{"type":"number"},"music":{"type":"number"},"mix":{"type":"number"}},"required":["dialogue","animation","sound","music","mix"],"description":"Progress 0..100 of each department while producing (the production floor)"},"mode":{"type":"string","enum":["auto","director"]},"theme":{"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)$"},"slug":{"type":"string"},"kind":{"type":"string","enum":["series","style"]},"planet":{"anyOf":[{"type":"string","enum":["action","adventure","sports","comedy","zumurruda","science","bonbon","heroes"]},{"type":"null"}]},"name":{"type":"object","properties":{"ar":{"type":"string","minLength":1},"en":{"type":"string","minLength":1}},"required":["ar","en"]},"tagline":{"type":"object","properties":{"ar":{"type":"string","minLength":1},"en":{"type":"string","minLength":1}},"required":["ar","en"]},"colors":{"type":"object","properties":{"from":{"type":"string","pattern":"^#[0-9a-fA-F]{6}$"},"to":{"type":"string","pattern":"^#[0-9a-fA-F]{6}$"},"accent":{"type":"string","pattern":"^#[0-9a-fA-F]{6}$"}},"required":["from","to","accent"]},"emoji":{"type":"string"},"jingle":{"type":"string","enum":["mystery","heroic","sports","mecha","tearjerker","pirate","power","creature","slapstick","anime","retro","family","kawaii","storybook","kids","adventure"]},"coverUrl":{"type":["string","null"]},"sampleUrl":{"type":["string","null"]},"loopUrl":{"type":["string","null"]},"dialect":{"type":"string"},"narrator":{"type":"boolean"},"ideas":{"type":"array","items":{"type":"object","properties":{"ar":{"type":"string","minLength":1},"en":{"type":"string","minLength":1}},"required":["ar","en"]}},"cast":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":40,"pattern":"^[a-z0-9-]+$"},"name":{"type":"object","properties":{"ar":{"type":"string","minLength":1},"en":{"type":"string","minLength":1}},"required":["ar","en"]},"appearance":{"type":"string","minLength":1,"maxLength":600,"description":"English description the image model draws (hair, outfit, colours, build)"},"personality":{"default":"","type":"string","maxLength":300},"gender":{"type":"string","enum":["male","female"]},"age":{"type":"string","enum":["child","teen","adult","elder"]},"voiceId":{"default":null,"description":"Default voice (Cartoon category)","anyOf":[{"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)$"},{"type":"null"}]},"voiceFx":{"default":"none","type":"string","enum":["none","chibi","giant","robot","alien","radio","echo","monster"]},"imageUrl":{"type":["string","null"]}},"required":["id","name","appearance","gender","age","imageUrl"]}},"locked":{"type":"boolean","description":"The plan does not include this theme (series need cartoonSeries)"},"order":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}},"required":["id","slug","kind","planet","name","tagline","colors","emoji","jingle","coverUrl","sampleUrl","loopUrl","dialect","narrator","ideas","cast","locked","order"]},"lengthSeconds":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"dialect":{"type":"string"},"aspectRatio":{"type":"string","enum":["9:16","16:9","1:1"]},"tier":{"type":"string"},"captions":{"type":"boolean"},"opening":{"type":"boolean"},"characters":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"role":{"type":"string"},"appearance":{"type":"string"},"personality":{"type":"string"},"gender":{"type":"string","enum":["male","female"]},"age":{"type":"string","enum":["child","teen","adult","elder"]},"voiceId":{"anyOf":[{"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)$"},{"type":"null"}]},"voiceFx":{"type":"string","enum":["none","chibi","giant","robot","alien","radio","echo","monster"]},"castId":{"type":["string","null"]},"sheetUrl":{"type":["string","null"]},"sheetStatus":{"type":"string","enum":["none","pending","ready","failed"]}},"required":["id","name","role","appearance","personality","gender","age","voiceId","voiceFx","castId","sheetUrl","sheetStatus"]}},"locations":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"ambience":{"type":"string"}},"required":["id","name","description","ambience"]}},"shots":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"locationId":{"type":["string","null"]},"camera":{"type":"string"},"action":{"type":"string","description":"English visual prompt"},"summary":{"description":"What the shot shows, one line in the episode language (the screenplay page shows it)","type":["string","null"]},"characters":{"type":"array","items":{"type":"string"}},"lines":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"speaker":{"type":"string","description":"A character id, or narrator"},"text":{"type":"string"},"emotion":{"type":"string"},"start":{"type":["number","null"]},"end":{"type":["number","null"]},"audioUrl":{"type":["string","null"]}},"required":["id","speaker","text","emotion","start","end","audioUrl"]}},"sfx":{"type":"array","items":{"type":"object","properties":{"what":{"type":"string"},"label":{"description":"Its name in the episode language","type":"string"},"tags":{"type":"array","items":{"type":"string"}},"at":{"type":"number"},"intensity":{"type":"string","enum":["soft","normal","big"]}},"required":["what","tags","at","intensity"]}},"music":{"type":"string","enum":["none","stinger","swell","tension","victory","sad","comic"]},"start":{"type":["number","null"]},"end":{"type":["number","null"]},"status":{"type":"string","enum":["pending","queued","rendering","ready","failed"]},"frameUrl":{"type":["string","null"]},"clipUrl":{"type":["string","null"]},"error":{"type":["string","null"]},"parentId":{"description":"Set on a shot split from a long one (it shares the parent still)","type":["string","null"]}},"required":["id","locationId","camera","action","summary","characters","lines","sfx","music","start","end","status","frameUrl","clipUrl","error","parentId"]}},"song":{"anyOf":[{"type":"object","properties":{"lyrics":{"type":"string"}},"required":["lyrics"]},{"type":"null"}]},"cues":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"lane":{"type":"string","enum":["sfx","foley","ambience","music"]},"label":{"type":"string"},"at":{"type":"number"},"duration":{"type":"number"},"gain":{"type":"number","description":"dB"},"pan":{"type":"number"},"muted":{"type":"boolean"},"source":{"type":"string","enum":["library","generated","synth"]},"soundId":{"anyOf":[{"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)$"},{"type":"null"}]},"url":{"type":["string","null"]},"shotId":{"type":["string","null"]},"generating":{"type":"boolean","description":"A new take is being made (regenerate)"},"alternatives":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"label":{"type":"string"},"source":{"type":"string","enum":["library","generated","synth"]},"url":{"type":["string","null"]}},"required":["id","label","source","url"]}}},"required":["id","lane","label","at","duration","gain","pan","muted","source","soundId","url","shotId","generating","alternatives"]}},"mix":{"type":"object","propertyNames":{"type":"string","enum":["dialogue","sfx","foley","ambience","music"]},"additionalProperties":{"type":"object","properties":{"gain":{"type":"number","minimum":-30,"maximum":12},"muted":{"type":"boolean"}},"required":["gain","muted"]},"required":["dialogue","sfx","foley","ambience","music"]},"duration":{"type":"number"},"creditsReserved":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"creditsCharged":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"regenerationsLeft":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"previousId":{"anyOf":[{"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)$"},{"type":"null"}]},"episode":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"output":{"anyOf":[{"type":"object","properties":{"videoUrl":{"type":["string","null"]},"downloadUrl":{"type":["string","null"]},"thumbnailUrl":{"type":["string","null"]},"watermarked":{"type":"boolean"},"generationId":{"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)$"},"duration":{"type":"number"},"stems":{"anyOf":[{"type":"object","propertyNames":{"type":"string","enum":["dialogue","sfx","foley","ambience","music"]},"additionalProperties":{"type":["string","null"]},"required":["dialogue","sfx","foley","ambience","music"]},{"type":"null"}],"description":"Signed WAV per lane (entitlement cartoonStems)"},"posterUrl":{"type":["string","null"]}},"required":["videoUrl","downloadUrl","thumbnailUrl","watermarked","generationId","duration","stems","posterUrl"]},{"type":"null"}]},"renderedAt":{"type":["string","null"]},"occasion":{"anyOf":[{"type":"string","enum":["birthday"]},{"type":"null"}],"description":"Set on a Birthday Hero video"},"hero":{"anyOf":[{"type":"object","properties":{"name":{"type":"string"},"age":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"gender":{"type":"string","enum":["boy","girl"]},"message":{"type":"string"},"details":{"type":"string"},"photoUrls":{"type":"array","items":{"type":"string"},"description":"Signed URLs of the uploaded photos (empty once deleted)"},"photosDeleted":{"type":"boolean"},"photosExpireAt":{"type":["string","null"]}},"required":["name","age","gender","message","details","photoUrls","photosDeleted","photosExpireAt"]},{"type":"null"}],"description":"The birthday child (Birthday Hero videos only)"}},"required":["id","createdAt","updatedAt","title","logline","idea","status","stage","progress","error","failedStage","errorPath","departments","mode","theme","lengthSeconds","dialect","aspectRatio","tier","captions","opening","characters","locations","shots","song","cues","mix","duration","creditsReserved","creditsCharged","regenerationsLeft","previousId","episode","output","renderedAt","occasion","hero"]},"example":{"id":"01990000-0000-7000-8000-000000000001","createdAt":"2026-09-19T12:00:00.000Z","updatedAt":"2026-09-19T12:00:00.000Z","title":"example","logline":"example","idea":"example","status":"writing","stage":"write","progress":1,"error":"example","failedStage":"write","errorPath":"example","departments":{"dialogue":1,"animation":1,"sound":1,"music":1,"mix":1},"mode":"auto","theme":{"id":"01990000-0000-7000-8000-000000000001","slug":"example","kind":"series","planet":"action","name":{"ar":"مثال","en":"example"},"tagline":{"ar":"مثال","en":"example"},"colors":{"from":"example","to":"example","accent":"example"},"emoji":"example","jingle":"mystery","coverUrl":"http://localhost:4000/example","sampleUrl":"http://localhost:4000/example","loopUrl":"http://localhost:4000/example","dialect":"ar-SA","narrator":true,"ideas":[{"ar":"مثال","en":"example"}],"cast":[{"id":"example","name":{"ar":"مثال","en":"example"},"appearance":"example","personality":"","gender":"male","age":"child","voiceId":null,"voiceFx":"none","imageUrl":"http://localhost:4000/example"}],"locked":true,"order":-9007199254740991},"lengthSeconds":-9007199254740991,"dialect":"ar-SA","aspectRatio":"9:16","tier":"example","captions":true,"opening":true,"characters":[{"id":"example","name":"Noura","role":"example","appearance":"example","personality":"example","gender":"male","age":"child","voiceId":"01990000-0000-7000-8000-000000000001","voiceFx":"none","castId":"example","sheetUrl":"http://localhost:4000/example","sheetStatus":"none"}],"locations":[{"id":"example","name":"Noura","description":"example","ambience":"example"}],"shots":[{"id":"example","locationId":"example","camera":"example","action":"example","summary":"example","characters":["example"],"lines":[{"id":"example","speaker":"example","text":"مرحباً بك في فوكلا.","emotion":"example","start":"example","end":"example","audioUrl":"http://localhost:4000/example"}],"sfx":[{"what":"example","label":"example","tags":["example"],"at":1,"intensity":"soft"}],"music":"none","start":"example","end":"example","status":"pending","frameUrl":"http://localhost:4000/example","clipUrl":"http://localhost:4000/example","error":"example","parentId":"example"}],"song":{"lyrics":"example"},"cues":[{"id":"example","lane":"sfx","label":"example","at":1,"duration":1,"gain":1,"pan":1,"muted":true,"source":"library","soundId":"01990000-0000-7000-8000-000000000001","url":"example","shotId":"example","generating":true,"alternatives":[{"id":"example","label":"example","source":"library","url":"example"}]}],"mix":{},"duration":1,"creditsReserved":-9007199254740991,"creditsCharged":-9007199254740991,"regenerationsLeft":-9007199254740991,"previousId":"01990000-0000-7000-8000-000000000001","episode":-9007199254740991,"output":{"videoUrl":"http://localhost:4000/example","downloadUrl":"http://localhost:4000/example","thumbnailUrl":"http://localhost:4000/example","watermarked":true,"generationId":"01990000-0000-7000-8000-000000000001","duration":1,"stems":{},"posterUrl":"http://localhost:4000/example"},"renderedAt":"2026-09-19T12:00:00.000Z","occasion":"birthday","hero":{"name":"Noura","age":-9007199254740991,"gender":"boy","message":"example","details":"example","photoUrls":["example"],"photosDeleted":true,"photosExpireAt":"2026-09-19T12:00:00.000Z"}}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/cartoon/projects/{id}/shots/{shotId}/regenerate","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/cartoon/projects/{id}/shots/{shotId}/regenerate","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/cartoon/projects/{id}/shots/{shotId}/regenerate","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/cartoon/projects/{id}/shots/{shotId}/regenerate","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/cartoon/projects/{id}/shots/{shotId}/regenerate","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/cartoon/projects/{id}/shots/{shotId}/regenerate","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/cartoon/projects/{id}/shots/{shotId}/regenerate","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/cartoon/projects/{id}/shots/{shotId}/regenerate","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/cartoon/projects/{id}/shots/{shotId}/regenerate","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/cartoon/projects/{id}/shots/{shotId}/regenerate","traceId":"request-id"}}}}}}},"/v1/cartoon/projects/{id}/produce":{"post":{"operationId":"produceCartoonProject","tags":["Cartoon"],"summary":"Reserve credits and produce the episode: voices, animated shots, sound design, music and the mix. Requires an Idempotency-Key header; repeating it returns the same production","description":"Requires workspace role editor or above. Retry with the same Idempotency-Key and identical body. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"Idempotency-Key","in":"header","required":true,"schema":{"type":"string","maxLength":200},"example":"request-2026-001"},{"name":"X-CSRF-Token","in":"header","required":false,"description":"Required for cookie-authenticated mutations; returned by sign-in/sign-up.","schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"responses":{"202":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","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)$"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"},"title":{"type":"string"},"logline":{"type":"string"},"idea":{"type":"string"},"status":{"type":"string","enum":["writing","scripted","casting","cast","storyboarding","storyboarded","producing","mixing","ready","failed"],"description":"scripted, cast and storyboarded wait for the person (director mode); one-click mode walks through them"},"stage":{"anyOf":[{"type":"string","enum":["write","sheets","storyboard","voice","render","poll","sound","mix"]},{"type":"null"}]},"progress":{"type":"number"},"error":{"description":"WRITE_FAILED, SHEETS_FAILED, STORYBOARD_FAILED, VOICE_FAILED, TOO_LONG, SCENE_FAILED, RENDER_FAILED, REMIX_FAILED; on a storyboard one-click could not produce: the refusal code (FORBIDDEN, INSUFFICIENT_CREDITS…) with errorPath","type":["string","null"]},"failedStage":{"anyOf":[{"type":"string","enum":["write","sheets","storyboard","voice","render","poll","sound","mix"]},{"type":"null"}]},"errorPath":{"description":"The plan limit that stopped one-click production (an entitlement key), for the upgrade prompt","type":["string","null"]},"departments":{"type":"object","properties":{"dialogue":{"type":"number"},"animation":{"type":"number"},"sound":{"type":"number"},"music":{"type":"number"},"mix":{"type":"number"}},"required":["dialogue","animation","sound","music","mix"],"description":"Progress 0..100 of each department while producing (the production floor)"},"mode":{"type":"string","enum":["auto","director"]},"theme":{"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)$"},"slug":{"type":"string"},"kind":{"type":"string","enum":["series","style"]},"planet":{"anyOf":[{"type":"string","enum":["action","adventure","sports","comedy","zumurruda","science","bonbon","heroes"]},{"type":"null"}]},"name":{"type":"object","properties":{"ar":{"type":"string","minLength":1},"en":{"type":"string","minLength":1}},"required":["ar","en"]},"tagline":{"type":"object","properties":{"ar":{"type":"string","minLength":1},"en":{"type":"string","minLength":1}},"required":["ar","en"]},"colors":{"type":"object","properties":{"from":{"type":"string","pattern":"^#[0-9a-fA-F]{6}$"},"to":{"type":"string","pattern":"^#[0-9a-fA-F]{6}$"},"accent":{"type":"string","pattern":"^#[0-9a-fA-F]{6}$"}},"required":["from","to","accent"]},"emoji":{"type":"string"},"jingle":{"type":"string","enum":["mystery","heroic","sports","mecha","tearjerker","pirate","power","creature","slapstick","anime","retro","family","kawaii","storybook","kids","adventure"]},"coverUrl":{"type":["string","null"]},"sampleUrl":{"type":["string","null"]},"loopUrl":{"type":["string","null"]},"dialect":{"type":"string"},"narrator":{"type":"boolean"},"ideas":{"type":"array","items":{"type":"object","properties":{"ar":{"type":"string","minLength":1},"en":{"type":"string","minLength":1}},"required":["ar","en"]}},"cast":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":40,"pattern":"^[a-z0-9-]+$"},"name":{"type":"object","properties":{"ar":{"type":"string","minLength":1},"en":{"type":"string","minLength":1}},"required":["ar","en"]},"appearance":{"type":"string","minLength":1,"maxLength":600,"description":"English description the image model draws (hair, outfit, colours, build)"},"personality":{"default":"","type":"string","maxLength":300},"gender":{"type":"string","enum":["male","female"]},"age":{"type":"string","enum":["child","teen","adult","elder"]},"voiceId":{"default":null,"description":"Default voice (Cartoon category)","anyOf":[{"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)$"},{"type":"null"}]},"voiceFx":{"default":"none","type":"string","enum":["none","chibi","giant","robot","alien","radio","echo","monster"]},"imageUrl":{"type":["string","null"]}},"required":["id","name","appearance","gender","age","imageUrl"]}},"locked":{"type":"boolean","description":"The plan does not include this theme (series need cartoonSeries)"},"order":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}},"required":["id","slug","kind","planet","name","tagline","colors","emoji","jingle","coverUrl","sampleUrl","loopUrl","dialect","narrator","ideas","cast","locked","order"]},"lengthSeconds":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"dialect":{"type":"string"},"aspectRatio":{"type":"string","enum":["9:16","16:9","1:1"]},"tier":{"type":"string"},"captions":{"type":"boolean"},"opening":{"type":"boolean"},"characters":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"role":{"type":"string"},"appearance":{"type":"string"},"personality":{"type":"string"},"gender":{"type":"string","enum":["male","female"]},"age":{"type":"string","enum":["child","teen","adult","elder"]},"voiceId":{"anyOf":[{"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)$"},{"type":"null"}]},"voiceFx":{"type":"string","enum":["none","chibi","giant","robot","alien","radio","echo","monster"]},"castId":{"type":["string","null"]},"sheetUrl":{"type":["string","null"]},"sheetStatus":{"type":"string","enum":["none","pending","ready","failed"]}},"required":["id","name","role","appearance","personality","gender","age","voiceId","voiceFx","castId","sheetUrl","sheetStatus"]}},"locations":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"ambience":{"type":"string"}},"required":["id","name","description","ambience"]}},"shots":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"locationId":{"type":["string","null"]},"camera":{"type":"string"},"action":{"type":"string","description":"English visual prompt"},"summary":{"description":"What the shot shows, one line in the episode language (the screenplay page shows it)","type":["string","null"]},"characters":{"type":"array","items":{"type":"string"}},"lines":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"speaker":{"type":"string","description":"A character id, or narrator"},"text":{"type":"string"},"emotion":{"type":"string"},"start":{"type":["number","null"]},"end":{"type":["number","null"]},"audioUrl":{"type":["string","null"]}},"required":["id","speaker","text","emotion","start","end","audioUrl"]}},"sfx":{"type":"array","items":{"type":"object","properties":{"what":{"type":"string"},"label":{"description":"Its name in the episode language","type":"string"},"tags":{"type":"array","items":{"type":"string"}},"at":{"type":"number"},"intensity":{"type":"string","enum":["soft","normal","big"]}},"required":["what","tags","at","intensity"]}},"music":{"type":"string","enum":["none","stinger","swell","tension","victory","sad","comic"]},"start":{"type":["number","null"]},"end":{"type":["number","null"]},"status":{"type":"string","enum":["pending","queued","rendering","ready","failed"]},"frameUrl":{"type":["string","null"]},"clipUrl":{"type":["string","null"]},"error":{"type":["string","null"]},"parentId":{"description":"Set on a shot split from a long one (it shares the parent still)","type":["string","null"]}},"required":["id","locationId","camera","action","summary","characters","lines","sfx","music","start","end","status","frameUrl","clipUrl","error","parentId"]}},"song":{"anyOf":[{"type":"object","properties":{"lyrics":{"type":"string"}},"required":["lyrics"]},{"type":"null"}]},"cues":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"lane":{"type":"string","enum":["sfx","foley","ambience","music"]},"label":{"type":"string"},"at":{"type":"number"},"duration":{"type":"number"},"gain":{"type":"number","description":"dB"},"pan":{"type":"number"},"muted":{"type":"boolean"},"source":{"type":"string","enum":["library","generated","synth"]},"soundId":{"anyOf":[{"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)$"},{"type":"null"}]},"url":{"type":["string","null"]},"shotId":{"type":["string","null"]},"generating":{"type":"boolean","description":"A new take is being made (regenerate)"},"alternatives":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"label":{"type":"string"},"source":{"type":"string","enum":["library","generated","synth"]},"url":{"type":["string","null"]}},"required":["id","label","source","url"]}}},"required":["id","lane","label","at","duration","gain","pan","muted","source","soundId","url","shotId","generating","alternatives"]}},"mix":{"type":"object","propertyNames":{"type":"string","enum":["dialogue","sfx","foley","ambience","music"]},"additionalProperties":{"type":"object","properties":{"gain":{"type":"number","minimum":-30,"maximum":12},"muted":{"type":"boolean"}},"required":["gain","muted"]},"required":["dialogue","sfx","foley","ambience","music"]},"duration":{"type":"number"},"creditsReserved":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"creditsCharged":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"regenerationsLeft":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"previousId":{"anyOf":[{"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)$"},{"type":"null"}]},"episode":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"output":{"anyOf":[{"type":"object","properties":{"videoUrl":{"type":["string","null"]},"downloadUrl":{"type":["string","null"]},"thumbnailUrl":{"type":["string","null"]},"watermarked":{"type":"boolean"},"generationId":{"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)$"},"duration":{"type":"number"},"stems":{"anyOf":[{"type":"object","propertyNames":{"type":"string","enum":["dialogue","sfx","foley","ambience","music"]},"additionalProperties":{"type":["string","null"]},"required":["dialogue","sfx","foley","ambience","music"]},{"type":"null"}],"description":"Signed WAV per lane (entitlement cartoonStems)"},"posterUrl":{"type":["string","null"]}},"required":["videoUrl","downloadUrl","thumbnailUrl","watermarked","generationId","duration","stems","posterUrl"]},{"type":"null"}]},"renderedAt":{"type":["string","null"]},"occasion":{"anyOf":[{"type":"string","enum":["birthday"]},{"type":"null"}],"description":"Set on a Birthday Hero video"},"hero":{"anyOf":[{"type":"object","properties":{"name":{"type":"string"},"age":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"gender":{"type":"string","enum":["boy","girl"]},"message":{"type":"string"},"details":{"type":"string"},"photoUrls":{"type":"array","items":{"type":"string"},"description":"Signed URLs of the uploaded photos (empty once deleted)"},"photosDeleted":{"type":"boolean"},"photosExpireAt":{"type":["string","null"]}},"required":["name","age","gender","message","details","photoUrls","photosDeleted","photosExpireAt"]},{"type":"null"}],"description":"The birthday child (Birthday Hero videos only)"}},"required":["id","createdAt","updatedAt","title","logline","idea","status","stage","progress","error","failedStage","errorPath","departments","mode","theme","lengthSeconds","dialect","aspectRatio","tier","captions","opening","characters","locations","shots","song","cues","mix","duration","creditsReserved","creditsCharged","regenerationsLeft","previousId","episode","output","renderedAt","occasion","hero"]},"example":{"id":"01990000-0000-7000-8000-000000000001","createdAt":"2026-09-19T12:00:00.000Z","updatedAt":"2026-09-19T12:00:00.000Z","title":"example","logline":"example","idea":"example","status":"writing","stage":"write","progress":1,"error":"example","failedStage":"write","errorPath":"example","departments":{"dialogue":1,"animation":1,"sound":1,"music":1,"mix":1},"mode":"auto","theme":{"id":"01990000-0000-7000-8000-000000000001","slug":"example","kind":"series","planet":"action","name":{"ar":"مثال","en":"example"},"tagline":{"ar":"مثال","en":"example"},"colors":{"from":"example","to":"example","accent":"example"},"emoji":"example","jingle":"mystery","coverUrl":"http://localhost:4000/example","sampleUrl":"http://localhost:4000/example","loopUrl":"http://localhost:4000/example","dialect":"ar-SA","narrator":true,"ideas":[{"ar":"مثال","en":"example"}],"cast":[{"id":"example","name":{"ar":"مثال","en":"example"},"appearance":"example","personality":"","gender":"male","age":"child","voiceId":null,"voiceFx":"none","imageUrl":"http://localhost:4000/example"}],"locked":true,"order":-9007199254740991},"lengthSeconds":-9007199254740991,"dialect":"ar-SA","aspectRatio":"9:16","tier":"example","captions":true,"opening":true,"characters":[{"id":"example","name":"Noura","role":"example","appearance":"example","personality":"example","gender":"male","age":"child","voiceId":"01990000-0000-7000-8000-000000000001","voiceFx":"none","castId":"example","sheetUrl":"http://localhost:4000/example","sheetStatus":"none"}],"locations":[{"id":"example","name":"Noura","description":"example","ambience":"example"}],"shots":[{"id":"example","locationId":"example","camera":"example","action":"example","summary":"example","characters":["example"],"lines":[{"id":"example","speaker":"example","text":"مرحباً بك في فوكلا.","emotion":"example","start":"example","end":"example","audioUrl":"http://localhost:4000/example"}],"sfx":[{"what":"example","label":"example","tags":["example"],"at":1,"intensity":"soft"}],"music":"none","start":"example","end":"example","status":"pending","frameUrl":"http://localhost:4000/example","clipUrl":"http://localhost:4000/example","error":"example","parentId":"example"}],"song":{"lyrics":"example"},"cues":[{"id":"example","lane":"sfx","label":"example","at":1,"duration":1,"gain":1,"pan":1,"muted":true,"source":"library","soundId":"01990000-0000-7000-8000-000000000001","url":"example","shotId":"example","generating":true,"alternatives":[{"id":"example","label":"example","source":"library","url":"example"}]}],"mix":{},"duration":1,"creditsReserved":-9007199254740991,"creditsCharged":-9007199254740991,"regenerationsLeft":-9007199254740991,"previousId":"01990000-0000-7000-8000-000000000001","episode":-9007199254740991,"output":{"videoUrl":"http://localhost:4000/example","downloadUrl":"http://localhost:4000/example","thumbnailUrl":"http://localhost:4000/example","watermarked":true,"generationId":"01990000-0000-7000-8000-000000000001","duration":1,"stems":{},"posterUrl":"http://localhost:4000/example"},"renderedAt":"2026-09-19T12:00:00.000Z","occasion":"birthday","hero":{"name":"Noura","age":-9007199254740991,"gender":"boy","message":"example","details":"example","photoUrls":["example"],"photosDeleted":true,"photosExpireAt":"2026-09-19T12:00:00.000Z"}}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/cartoon/projects/{id}/produce","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/cartoon/projects/{id}/produce","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/cartoon/projects/{id}/produce","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/cartoon/projects/{id}/produce","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/cartoon/projects/{id}/produce","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/cartoon/projects/{id}/produce","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/cartoon/projects/{id}/produce","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/cartoon/projects/{id}/produce","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/cartoon/projects/{id}/produce","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/cartoon/projects/{id}/produce","traceId":"request-id"}}}}}}},"/v1/cartoon/projects/{id}/retry":{"post":{"operationId":"retryCartoonProject","tags":["Cartoon"],"summary":"Run the failed stage again (failed shots as a new production; their credits were refunded)","description":"Requires workspace role editor or above. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"X-CSRF-Token","in":"header","required":false,"description":"Required for cookie-authenticated mutations; returned by sign-in/sign-up.","schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","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)$"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"},"title":{"type":"string"},"logline":{"type":"string"},"idea":{"type":"string"},"status":{"type":"string","enum":["writing","scripted","casting","cast","storyboarding","storyboarded","producing","mixing","ready","failed"],"description":"scripted, cast and storyboarded wait for the person (director mode); one-click mode walks through them"},"stage":{"anyOf":[{"type":"string","enum":["write","sheets","storyboard","voice","render","poll","sound","mix"]},{"type":"null"}]},"progress":{"type":"number"},"error":{"description":"WRITE_FAILED, SHEETS_FAILED, STORYBOARD_FAILED, VOICE_FAILED, TOO_LONG, SCENE_FAILED, RENDER_FAILED, REMIX_FAILED; on a storyboard one-click could not produce: the refusal code (FORBIDDEN, INSUFFICIENT_CREDITS…) with errorPath","type":["string","null"]},"failedStage":{"anyOf":[{"type":"string","enum":["write","sheets","storyboard","voice","render","poll","sound","mix"]},{"type":"null"}]},"errorPath":{"description":"The plan limit that stopped one-click production (an entitlement key), for the upgrade prompt","type":["string","null"]},"departments":{"type":"object","properties":{"dialogue":{"type":"number"},"animation":{"type":"number"},"sound":{"type":"number"},"music":{"type":"number"},"mix":{"type":"number"}},"required":["dialogue","animation","sound","music","mix"],"description":"Progress 0..100 of each department while producing (the production floor)"},"mode":{"type":"string","enum":["auto","director"]},"theme":{"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)$"},"slug":{"type":"string"},"kind":{"type":"string","enum":["series","style"]},"planet":{"anyOf":[{"type":"string","enum":["action","adventure","sports","comedy","zumurruda","science","bonbon","heroes"]},{"type":"null"}]},"name":{"type":"object","properties":{"ar":{"type":"string","minLength":1},"en":{"type":"string","minLength":1}},"required":["ar","en"]},"tagline":{"type":"object","properties":{"ar":{"type":"string","minLength":1},"en":{"type":"string","minLength":1}},"required":["ar","en"]},"colors":{"type":"object","properties":{"from":{"type":"string","pattern":"^#[0-9a-fA-F]{6}$"},"to":{"type":"string","pattern":"^#[0-9a-fA-F]{6}$"},"accent":{"type":"string","pattern":"^#[0-9a-fA-F]{6}$"}},"required":["from","to","accent"]},"emoji":{"type":"string"},"jingle":{"type":"string","enum":["mystery","heroic","sports","mecha","tearjerker","pirate","power","creature","slapstick","anime","retro","family","kawaii","storybook","kids","adventure"]},"coverUrl":{"type":["string","null"]},"sampleUrl":{"type":["string","null"]},"loopUrl":{"type":["string","null"]},"dialect":{"type":"string"},"narrator":{"type":"boolean"},"ideas":{"type":"array","items":{"type":"object","properties":{"ar":{"type":"string","minLength":1},"en":{"type":"string","minLength":1}},"required":["ar","en"]}},"cast":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":40,"pattern":"^[a-z0-9-]+$"},"name":{"type":"object","properties":{"ar":{"type":"string","minLength":1},"en":{"type":"string","minLength":1}},"required":["ar","en"]},"appearance":{"type":"string","minLength":1,"maxLength":600,"description":"English description the image model draws (hair, outfit, colours, build)"},"personality":{"default":"","type":"string","maxLength":300},"gender":{"type":"string","enum":["male","female"]},"age":{"type":"string","enum":["child","teen","adult","elder"]},"voiceId":{"default":null,"description":"Default voice (Cartoon category)","anyOf":[{"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)$"},{"type":"null"}]},"voiceFx":{"default":"none","type":"string","enum":["none","chibi","giant","robot","alien","radio","echo","monster"]},"imageUrl":{"type":["string","null"]}},"required":["id","name","appearance","gender","age","imageUrl"]}},"locked":{"type":"boolean","description":"The plan does not include this theme (series need cartoonSeries)"},"order":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}},"required":["id","slug","kind","planet","name","tagline","colors","emoji","jingle","coverUrl","sampleUrl","loopUrl","dialect","narrator","ideas","cast","locked","order"]},"lengthSeconds":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"dialect":{"type":"string"},"aspectRatio":{"type":"string","enum":["9:16","16:9","1:1"]},"tier":{"type":"string"},"captions":{"type":"boolean"},"opening":{"type":"boolean"},"characters":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"role":{"type":"string"},"appearance":{"type":"string"},"personality":{"type":"string"},"gender":{"type":"string","enum":["male","female"]},"age":{"type":"string","enum":["child","teen","adult","elder"]},"voiceId":{"anyOf":[{"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)$"},{"type":"null"}]},"voiceFx":{"type":"string","enum":["none","chibi","giant","robot","alien","radio","echo","monster"]},"castId":{"type":["string","null"]},"sheetUrl":{"type":["string","null"]},"sheetStatus":{"type":"string","enum":["none","pending","ready","failed"]}},"required":["id","name","role","appearance","personality","gender","age","voiceId","voiceFx","castId","sheetUrl","sheetStatus"]}},"locations":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"ambience":{"type":"string"}},"required":["id","name","description","ambience"]}},"shots":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"locationId":{"type":["string","null"]},"camera":{"type":"string"},"action":{"type":"string","description":"English visual prompt"},"summary":{"description":"What the shot shows, one line in the episode language (the screenplay page shows it)","type":["string","null"]},"characters":{"type":"array","items":{"type":"string"}},"lines":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"speaker":{"type":"string","description":"A character id, or narrator"},"text":{"type":"string"},"emotion":{"type":"string"},"start":{"type":["number","null"]},"end":{"type":["number","null"]},"audioUrl":{"type":["string","null"]}},"required":["id","speaker","text","emotion","start","end","audioUrl"]}},"sfx":{"type":"array","items":{"type":"object","properties":{"what":{"type":"string"},"label":{"description":"Its name in the episode language","type":"string"},"tags":{"type":"array","items":{"type":"string"}},"at":{"type":"number"},"intensity":{"type":"string","enum":["soft","normal","big"]}},"required":["what","tags","at","intensity"]}},"music":{"type":"string","enum":["none","stinger","swell","tension","victory","sad","comic"]},"start":{"type":["number","null"]},"end":{"type":["number","null"]},"status":{"type":"string","enum":["pending","queued","rendering","ready","failed"]},"frameUrl":{"type":["string","null"]},"clipUrl":{"type":["string","null"]},"error":{"type":["string","null"]},"parentId":{"description":"Set on a shot split from a long one (it shares the parent still)","type":["string","null"]}},"required":["id","locationId","camera","action","summary","characters","lines","sfx","music","start","end","status","frameUrl","clipUrl","error","parentId"]}},"song":{"anyOf":[{"type":"object","properties":{"lyrics":{"type":"string"}},"required":["lyrics"]},{"type":"null"}]},"cues":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"lane":{"type":"string","enum":["sfx","foley","ambience","music"]},"label":{"type":"string"},"at":{"type":"number"},"duration":{"type":"number"},"gain":{"type":"number","description":"dB"},"pan":{"type":"number"},"muted":{"type":"boolean"},"source":{"type":"string","enum":["library","generated","synth"]},"soundId":{"anyOf":[{"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)$"},{"type":"null"}]},"url":{"type":["string","null"]},"shotId":{"type":["string","null"]},"generating":{"type":"boolean","description":"A new take is being made (regenerate)"},"alternatives":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"label":{"type":"string"},"source":{"type":"string","enum":["library","generated","synth"]},"url":{"type":["string","null"]}},"required":["id","label","source","url"]}}},"required":["id","lane","label","at","duration","gain","pan","muted","source","soundId","url","shotId","generating","alternatives"]}},"mix":{"type":"object","propertyNames":{"type":"string","enum":["dialogue","sfx","foley","ambience","music"]},"additionalProperties":{"type":"object","properties":{"gain":{"type":"number","minimum":-30,"maximum":12},"muted":{"type":"boolean"}},"required":["gain","muted"]},"required":["dialogue","sfx","foley","ambience","music"]},"duration":{"type":"number"},"creditsReserved":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"creditsCharged":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"regenerationsLeft":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"previousId":{"anyOf":[{"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)$"},{"type":"null"}]},"episode":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"output":{"anyOf":[{"type":"object","properties":{"videoUrl":{"type":["string","null"]},"downloadUrl":{"type":["string","null"]},"thumbnailUrl":{"type":["string","null"]},"watermarked":{"type":"boolean"},"generationId":{"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)$"},"duration":{"type":"number"},"stems":{"anyOf":[{"type":"object","propertyNames":{"type":"string","enum":["dialogue","sfx","foley","ambience","music"]},"additionalProperties":{"type":["string","null"]},"required":["dialogue","sfx","foley","ambience","music"]},{"type":"null"}],"description":"Signed WAV per lane (entitlement cartoonStems)"},"posterUrl":{"type":["string","null"]}},"required":["videoUrl","downloadUrl","thumbnailUrl","watermarked","generationId","duration","stems","posterUrl"]},{"type":"null"}]},"renderedAt":{"type":["string","null"]},"occasion":{"anyOf":[{"type":"string","enum":["birthday"]},{"type":"null"}],"description":"Set on a Birthday Hero video"},"hero":{"anyOf":[{"type":"object","properties":{"name":{"type":"string"},"age":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"gender":{"type":"string","enum":["boy","girl"]},"message":{"type":"string"},"details":{"type":"string"},"photoUrls":{"type":"array","items":{"type":"string"},"description":"Signed URLs of the uploaded photos (empty once deleted)"},"photosDeleted":{"type":"boolean"},"photosExpireAt":{"type":["string","null"]}},"required":["name","age","gender","message","details","photoUrls","photosDeleted","photosExpireAt"]},{"type":"null"}],"description":"The birthday child (Birthday Hero videos only)"}},"required":["id","createdAt","updatedAt","title","logline","idea","status","stage","progress","error","failedStage","errorPath","departments","mode","theme","lengthSeconds","dialect","aspectRatio","tier","captions","opening","characters","locations","shots","song","cues","mix","duration","creditsReserved","creditsCharged","regenerationsLeft","previousId","episode","output","renderedAt","occasion","hero"]},"example":{"id":"01990000-0000-7000-8000-000000000001","createdAt":"2026-09-19T12:00:00.000Z","updatedAt":"2026-09-19T12:00:00.000Z","title":"example","logline":"example","idea":"example","status":"writing","stage":"write","progress":1,"error":"example","failedStage":"write","errorPath":"example","departments":{"dialogue":1,"animation":1,"sound":1,"music":1,"mix":1},"mode":"auto","theme":{"id":"01990000-0000-7000-8000-000000000001","slug":"example","kind":"series","planet":"action","name":{"ar":"مثال","en":"example"},"tagline":{"ar":"مثال","en":"example"},"colors":{"from":"example","to":"example","accent":"example"},"emoji":"example","jingle":"mystery","coverUrl":"http://localhost:4000/example","sampleUrl":"http://localhost:4000/example","loopUrl":"http://localhost:4000/example","dialect":"ar-SA","narrator":true,"ideas":[{"ar":"مثال","en":"example"}],"cast":[{"id":"example","name":{"ar":"مثال","en":"example"},"appearance":"example","personality":"","gender":"male","age":"child","voiceId":null,"voiceFx":"none","imageUrl":"http://localhost:4000/example"}],"locked":true,"order":-9007199254740991},"lengthSeconds":-9007199254740991,"dialect":"ar-SA","aspectRatio":"9:16","tier":"example","captions":true,"opening":true,"characters":[{"id":"example","name":"Noura","role":"example","appearance":"example","personality":"example","gender":"male","age":"child","voiceId":"01990000-0000-7000-8000-000000000001","voiceFx":"none","castId":"example","sheetUrl":"http://localhost:4000/example","sheetStatus":"none"}],"locations":[{"id":"example","name":"Noura","description":"example","ambience":"example"}],"shots":[{"id":"example","locationId":"example","camera":"example","action":"example","summary":"example","characters":["example"],"lines":[{"id":"example","speaker":"example","text":"مرحباً بك في فوكلا.","emotion":"example","start":"example","end":"example","audioUrl":"http://localhost:4000/example"}],"sfx":[{"what":"example","label":"example","tags":["example"],"at":1,"intensity":"soft"}],"music":"none","start":"example","end":"example","status":"pending","frameUrl":"http://localhost:4000/example","clipUrl":"http://localhost:4000/example","error":"example","parentId":"example"}],"song":{"lyrics":"example"},"cues":[{"id":"example","lane":"sfx","label":"example","at":1,"duration":1,"gain":1,"pan":1,"muted":true,"source":"library","soundId":"01990000-0000-7000-8000-000000000001","url":"example","shotId":"example","generating":true,"alternatives":[{"id":"example","label":"example","source":"library","url":"example"}]}],"mix":{},"duration":1,"creditsReserved":-9007199254740991,"creditsCharged":-9007199254740991,"regenerationsLeft":-9007199254740991,"previousId":"01990000-0000-7000-8000-000000000001","episode":-9007199254740991,"output":{"videoUrl":"http://localhost:4000/example","downloadUrl":"http://localhost:4000/example","thumbnailUrl":"http://localhost:4000/example","watermarked":true,"generationId":"01990000-0000-7000-8000-000000000001","duration":1,"stems":{},"posterUrl":"http://localhost:4000/example"},"renderedAt":"2026-09-19T12:00:00.000Z","occasion":"birthday","hero":{"name":"Noura","age":-9007199254740991,"gender":"boy","message":"example","details":"example","photoUrls":["example"],"photosDeleted":true,"photosExpireAt":"2026-09-19T12:00:00.000Z"}}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/cartoon/projects/{id}/retry","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/cartoon/projects/{id}/retry","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/cartoon/projects/{id}/retry","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/cartoon/projects/{id}/retry","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/cartoon/projects/{id}/retry","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/cartoon/projects/{id}/retry","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/cartoon/projects/{id}/retry","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/cartoon/projects/{id}/retry","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/cartoon/projects/{id}/retry","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/cartoon/projects/{id}/retry","traceId":"request-id"}}}}}}},"/v1/cartoon/projects/{id}/sound":{"patch":{"operationId":"updateCartoonSound","tags":["Cartoon"],"summary":"Sound editor: move, level, pan, mute or swap cues and set lane levels; POST remix applies it","description":"Requires workspace role editor or above. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"X-CSRF-Token","in":"header","required":false,"description":"Required for cookie-authenticated mutations; returned by sign-in/sign-up.","schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"cues":{"maxItems":400,"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"at":{"type":"number","minimum":0,"maximum":600},"gain":{"type":"number","minimum":-30,"maximum":12},"pan":{"type":"number","minimum":-1,"maximum":1},"muted":{"type":"boolean"},"alternativeId":{"description":"Swap to one of the cue alternatives","type":"string"}},"required":["id"]}},"lanes":{"type":"object","propertyNames":{"type":"string","enum":["dialogue","sfx","foley","ambience","music"]},"additionalProperties":{"type":"object","properties":{"gain":{"type":"number","minimum":-30,"maximum":12},"muted":{"type":"boolean"}}}}}},"example":{"cues":[{"id":"example","at":0,"gain":-30,"pan":-1,"muted":true,"alternativeId":"example"}],"lanes":{}}}}},"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","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)$"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"},"title":{"type":"string"},"logline":{"type":"string"},"idea":{"type":"string"},"status":{"type":"string","enum":["writing","scripted","casting","cast","storyboarding","storyboarded","producing","mixing","ready","failed"],"description":"scripted, cast and storyboarded wait for the person (director mode); one-click mode walks through them"},"stage":{"anyOf":[{"type":"string","enum":["write","sheets","storyboard","voice","render","poll","sound","mix"]},{"type":"null"}]},"progress":{"type":"number"},"error":{"description":"WRITE_FAILED, SHEETS_FAILED, STORYBOARD_FAILED, VOICE_FAILED, TOO_LONG, SCENE_FAILED, RENDER_FAILED, REMIX_FAILED; on a storyboard one-click could not produce: the refusal code (FORBIDDEN, INSUFFICIENT_CREDITS…) with errorPath","type":["string","null"]},"failedStage":{"anyOf":[{"type":"string","enum":["write","sheets","storyboard","voice","render","poll","sound","mix"]},{"type":"null"}]},"errorPath":{"description":"The plan limit that stopped one-click production (an entitlement key), for the upgrade prompt","type":["string","null"]},"departments":{"type":"object","properties":{"dialogue":{"type":"number"},"animation":{"type":"number"},"sound":{"type":"number"},"music":{"type":"number"},"mix":{"type":"number"}},"required":["dialogue","animation","sound","music","mix"],"description":"Progress 0..100 of each department while producing (the production floor)"},"mode":{"type":"string","enum":["auto","director"]},"theme":{"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)$"},"slug":{"type":"string"},"kind":{"type":"string","enum":["series","style"]},"planet":{"anyOf":[{"type":"string","enum":["action","adventure","sports","comedy","zumurruda","science","bonbon","heroes"]},{"type":"null"}]},"name":{"type":"object","properties":{"ar":{"type":"string","minLength":1},"en":{"type":"string","minLength":1}},"required":["ar","en"]},"tagline":{"type":"object","properties":{"ar":{"type":"string","minLength":1},"en":{"type":"string","minLength":1}},"required":["ar","en"]},"colors":{"type":"object","properties":{"from":{"type":"string","pattern":"^#[0-9a-fA-F]{6}$"},"to":{"type":"string","pattern":"^#[0-9a-fA-F]{6}$"},"accent":{"type":"string","pattern":"^#[0-9a-fA-F]{6}$"}},"required":["from","to","accent"]},"emoji":{"type":"string"},"jingle":{"type":"string","enum":["mystery","heroic","sports","mecha","tearjerker","pirate","power","creature","slapstick","anime","retro","family","kawaii","storybook","kids","adventure"]},"coverUrl":{"type":["string","null"]},"sampleUrl":{"type":["string","null"]},"loopUrl":{"type":["string","null"]},"dialect":{"type":"string"},"narrator":{"type":"boolean"},"ideas":{"type":"array","items":{"type":"object","properties":{"ar":{"type":"string","minLength":1},"en":{"type":"string","minLength":1}},"required":["ar","en"]}},"cast":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":40,"pattern":"^[a-z0-9-]+$"},"name":{"type":"object","properties":{"ar":{"type":"string","minLength":1},"en":{"type":"string","minLength":1}},"required":["ar","en"]},"appearance":{"type":"string","minLength":1,"maxLength":600,"description":"English description the image model draws (hair, outfit, colours, build)"},"personality":{"default":"","type":"string","maxLength":300},"gender":{"type":"string","enum":["male","female"]},"age":{"type":"string","enum":["child","teen","adult","elder"]},"voiceId":{"default":null,"description":"Default voice (Cartoon category)","anyOf":[{"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)$"},{"type":"null"}]},"voiceFx":{"default":"none","type":"string","enum":["none","chibi","giant","robot","alien","radio","echo","monster"]},"imageUrl":{"type":["string","null"]}},"required":["id","name","appearance","gender","age","imageUrl"]}},"locked":{"type":"boolean","description":"The plan does not include this theme (series need cartoonSeries)"},"order":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}},"required":["id","slug","kind","planet","name","tagline","colors","emoji","jingle","coverUrl","sampleUrl","loopUrl","dialect","narrator","ideas","cast","locked","order"]},"lengthSeconds":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"dialect":{"type":"string"},"aspectRatio":{"type":"string","enum":["9:16","16:9","1:1"]},"tier":{"type":"string"},"captions":{"type":"boolean"},"opening":{"type":"boolean"},"characters":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"role":{"type":"string"},"appearance":{"type":"string"},"personality":{"type":"string"},"gender":{"type":"string","enum":["male","female"]},"age":{"type":"string","enum":["child","teen","adult","elder"]},"voiceId":{"anyOf":[{"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)$"},{"type":"null"}]},"voiceFx":{"type":"string","enum":["none","chibi","giant","robot","alien","radio","echo","monster"]},"castId":{"type":["string","null"]},"sheetUrl":{"type":["string","null"]},"sheetStatus":{"type":"string","enum":["none","pending","ready","failed"]}},"required":["id","name","role","appearance","personality","gender","age","voiceId","voiceFx","castId","sheetUrl","sheetStatus"]}},"locations":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"ambience":{"type":"string"}},"required":["id","name","description","ambience"]}},"shots":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"locationId":{"type":["string","null"]},"camera":{"type":"string"},"action":{"type":"string","description":"English visual prompt"},"summary":{"description":"What the shot shows, one line in the episode language (the screenplay page shows it)","type":["string","null"]},"characters":{"type":"array","items":{"type":"string"}},"lines":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"speaker":{"type":"string","description":"A character id, or narrator"},"text":{"type":"string"},"emotion":{"type":"string"},"start":{"type":["number","null"]},"end":{"type":["number","null"]},"audioUrl":{"type":["string","null"]}},"required":["id","speaker","text","emotion","start","end","audioUrl"]}},"sfx":{"type":"array","items":{"type":"object","properties":{"what":{"type":"string"},"label":{"description":"Its name in the episode language","type":"string"},"tags":{"type":"array","items":{"type":"string"}},"at":{"type":"number"},"intensity":{"type":"string","enum":["soft","normal","big"]}},"required":["what","tags","at","intensity"]}},"music":{"type":"string","enum":["none","stinger","swell","tension","victory","sad","comic"]},"start":{"type":["number","null"]},"end":{"type":["number","null"]},"status":{"type":"string","enum":["pending","queued","rendering","ready","failed"]},"frameUrl":{"type":["string","null"]},"clipUrl":{"type":["string","null"]},"error":{"type":["string","null"]},"parentId":{"description":"Set on a shot split from a long one (it shares the parent still)","type":["string","null"]}},"required":["id","locationId","camera","action","summary","characters","lines","sfx","music","start","end","status","frameUrl","clipUrl","error","parentId"]}},"song":{"anyOf":[{"type":"object","properties":{"lyrics":{"type":"string"}},"required":["lyrics"]},{"type":"null"}]},"cues":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"lane":{"type":"string","enum":["sfx","foley","ambience","music"]},"label":{"type":"string"},"at":{"type":"number"},"duration":{"type":"number"},"gain":{"type":"number","description":"dB"},"pan":{"type":"number"},"muted":{"type":"boolean"},"source":{"type":"string","enum":["library","generated","synth"]},"soundId":{"anyOf":[{"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)$"},{"type":"null"}]},"url":{"type":["string","null"]},"shotId":{"type":["string","null"]},"generating":{"type":"boolean","description":"A new take is being made (regenerate)"},"alternatives":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"label":{"type":"string"},"source":{"type":"string","enum":["library","generated","synth"]},"url":{"type":["string","null"]}},"required":["id","label","source","url"]}}},"required":["id","lane","label","at","duration","gain","pan","muted","source","soundId","url","shotId","generating","alternatives"]}},"mix":{"type":"object","propertyNames":{"type":"string","enum":["dialogue","sfx","foley","ambience","music"]},"additionalProperties":{"type":"object","properties":{"gain":{"type":"number","minimum":-30,"maximum":12},"muted":{"type":"boolean"}},"required":["gain","muted"]},"required":["dialogue","sfx","foley","ambience","music"]},"duration":{"type":"number"},"creditsReserved":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"creditsCharged":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"regenerationsLeft":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"previousId":{"anyOf":[{"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)$"},{"type":"null"}]},"episode":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"output":{"anyOf":[{"type":"object","properties":{"videoUrl":{"type":["string","null"]},"downloadUrl":{"type":["string","null"]},"thumbnailUrl":{"type":["string","null"]},"watermarked":{"type":"boolean"},"generationId":{"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)$"},"duration":{"type":"number"},"stems":{"anyOf":[{"type":"object","propertyNames":{"type":"string","enum":["dialogue","sfx","foley","ambience","music"]},"additionalProperties":{"type":["string","null"]},"required":["dialogue","sfx","foley","ambience","music"]},{"type":"null"}],"description":"Signed WAV per lane (entitlement cartoonStems)"},"posterUrl":{"type":["string","null"]}},"required":["videoUrl","downloadUrl","thumbnailUrl","watermarked","generationId","duration","stems","posterUrl"]},{"type":"null"}]},"renderedAt":{"type":["string","null"]},"occasion":{"anyOf":[{"type":"string","enum":["birthday"]},{"type":"null"}],"description":"Set on a Birthday Hero video"},"hero":{"anyOf":[{"type":"object","properties":{"name":{"type":"string"},"age":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"gender":{"type":"string","enum":["boy","girl"]},"message":{"type":"string"},"details":{"type":"string"},"photoUrls":{"type":"array","items":{"type":"string"},"description":"Signed URLs of the uploaded photos (empty once deleted)"},"photosDeleted":{"type":"boolean"},"photosExpireAt":{"type":["string","null"]}},"required":["name","age","gender","message","details","photoUrls","photosDeleted","photosExpireAt"]},{"type":"null"}],"description":"The birthday child (Birthday Hero videos only)"}},"required":["id","createdAt","updatedAt","title","logline","idea","status","stage","progress","error","failedStage","errorPath","departments","mode","theme","lengthSeconds","dialect","aspectRatio","tier","captions","opening","characters","locations","shots","song","cues","mix","duration","creditsReserved","creditsCharged","regenerationsLeft","previousId","episode","output","renderedAt","occasion","hero"]},"example":{"id":"01990000-0000-7000-8000-000000000001","createdAt":"2026-09-19T12:00:00.000Z","updatedAt":"2026-09-19T12:00:00.000Z","title":"example","logline":"example","idea":"example","status":"writing","stage":"write","progress":1,"error":"example","failedStage":"write","errorPath":"example","departments":{"dialogue":1,"animation":1,"sound":1,"music":1,"mix":1},"mode":"auto","theme":{"id":"01990000-0000-7000-8000-000000000001","slug":"example","kind":"series","planet":"action","name":{"ar":"مثال","en":"example"},"tagline":{"ar":"مثال","en":"example"},"colors":{"from":"example","to":"example","accent":"example"},"emoji":"example","jingle":"mystery","coverUrl":"http://localhost:4000/example","sampleUrl":"http://localhost:4000/example","loopUrl":"http://localhost:4000/example","dialect":"ar-SA","narrator":true,"ideas":[{"ar":"مثال","en":"example"}],"cast":[{"id":"example","name":{"ar":"مثال","en":"example"},"appearance":"example","personality":"","gender":"male","age":"child","voiceId":null,"voiceFx":"none","imageUrl":"http://localhost:4000/example"}],"locked":true,"order":-9007199254740991},"lengthSeconds":-9007199254740991,"dialect":"ar-SA","aspectRatio":"9:16","tier":"example","captions":true,"opening":true,"characters":[{"id":"example","name":"Noura","role":"example","appearance":"example","personality":"example","gender":"male","age":"child","voiceId":"01990000-0000-7000-8000-000000000001","voiceFx":"none","castId":"example","sheetUrl":"http://localhost:4000/example","sheetStatus":"none"}],"locations":[{"id":"example","name":"Noura","description":"example","ambience":"example"}],"shots":[{"id":"example","locationId":"example","camera":"example","action":"example","summary":"example","characters":["example"],"lines":[{"id":"example","speaker":"example","text":"مرحباً بك في فوكلا.","emotion":"example","start":"example","end":"example","audioUrl":"http://localhost:4000/example"}],"sfx":[{"what":"example","label":"example","tags":["example"],"at":1,"intensity":"soft"}],"music":"none","start":"example","end":"example","status":"pending","frameUrl":"http://localhost:4000/example","clipUrl":"http://localhost:4000/example","error":"example","parentId":"example"}],"song":{"lyrics":"example"},"cues":[{"id":"example","lane":"sfx","label":"example","at":1,"duration":1,"gain":1,"pan":1,"muted":true,"source":"library","soundId":"01990000-0000-7000-8000-000000000001","url":"example","shotId":"example","generating":true,"alternatives":[{"id":"example","label":"example","source":"library","url":"example"}]}],"mix":{},"duration":1,"creditsReserved":-9007199254740991,"creditsCharged":-9007199254740991,"regenerationsLeft":-9007199254740991,"previousId":"01990000-0000-7000-8000-000000000001","episode":-9007199254740991,"output":{"videoUrl":"http://localhost:4000/example","downloadUrl":"http://localhost:4000/example","thumbnailUrl":"http://localhost:4000/example","watermarked":true,"generationId":"01990000-0000-7000-8000-000000000001","duration":1,"stems":{},"posterUrl":"http://localhost:4000/example"},"renderedAt":"2026-09-19T12:00:00.000Z","occasion":"birthday","hero":{"name":"Noura","age":-9007199254740991,"gender":"boy","message":"example","details":"example","photoUrls":["example"],"photosDeleted":true,"photosExpireAt":"2026-09-19T12:00:00.000Z"}}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/cartoon/projects/{id}/sound","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/cartoon/projects/{id}/sound","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/cartoon/projects/{id}/sound","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/cartoon/projects/{id}/sound","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/cartoon/projects/{id}/sound","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/cartoon/projects/{id}/sound","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/cartoon/projects/{id}/sound","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/cartoon/projects/{id}/sound","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/cartoon/projects/{id}/sound","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/cartoon/projects/{id}/sound","traceId":"request-id"}}}}}}},"/v1/cartoon/projects/{id}/remix":{"post":{"operationId":"remixCartoonProject","tags":["Cartoon"],"summary":"Mix the finished episode again with the sound editor changes (free; nothing is animated again)","description":"Requires workspace role editor or above. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"X-CSRF-Token","in":"header","required":false,"description":"Required for cookie-authenticated mutations; returned by sign-in/sign-up.","schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"responses":{"202":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","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)$"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"},"title":{"type":"string"},"logline":{"type":"string"},"idea":{"type":"string"},"status":{"type":"string","enum":["writing","scripted","casting","cast","storyboarding","storyboarded","producing","mixing","ready","failed"],"description":"scripted, cast and storyboarded wait for the person (director mode); one-click mode walks through them"},"stage":{"anyOf":[{"type":"string","enum":["write","sheets","storyboard","voice","render","poll","sound","mix"]},{"type":"null"}]},"progress":{"type":"number"},"error":{"description":"WRITE_FAILED, SHEETS_FAILED, STORYBOARD_FAILED, VOICE_FAILED, TOO_LONG, SCENE_FAILED, RENDER_FAILED, REMIX_FAILED; on a storyboard one-click could not produce: the refusal code (FORBIDDEN, INSUFFICIENT_CREDITS…) with errorPath","type":["string","null"]},"failedStage":{"anyOf":[{"type":"string","enum":["write","sheets","storyboard","voice","render","poll","sound","mix"]},{"type":"null"}]},"errorPath":{"description":"The plan limit that stopped one-click production (an entitlement key), for the upgrade prompt","type":["string","null"]},"departments":{"type":"object","properties":{"dialogue":{"type":"number"},"animation":{"type":"number"},"sound":{"type":"number"},"music":{"type":"number"},"mix":{"type":"number"}},"required":["dialogue","animation","sound","music","mix"],"description":"Progress 0..100 of each department while producing (the production floor)"},"mode":{"type":"string","enum":["auto","director"]},"theme":{"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)$"},"slug":{"type":"string"},"kind":{"type":"string","enum":["series","style"]},"planet":{"anyOf":[{"type":"string","enum":["action","adventure","sports","comedy","zumurruda","science","bonbon","heroes"]},{"type":"null"}]},"name":{"type":"object","properties":{"ar":{"type":"string","minLength":1},"en":{"type":"string","minLength":1}},"required":["ar","en"]},"tagline":{"type":"object","properties":{"ar":{"type":"string","minLength":1},"en":{"type":"string","minLength":1}},"required":["ar","en"]},"colors":{"type":"object","properties":{"from":{"type":"string","pattern":"^#[0-9a-fA-F]{6}$"},"to":{"type":"string","pattern":"^#[0-9a-fA-F]{6}$"},"accent":{"type":"string","pattern":"^#[0-9a-fA-F]{6}$"}},"required":["from","to","accent"]},"emoji":{"type":"string"},"jingle":{"type":"string","enum":["mystery","heroic","sports","mecha","tearjerker","pirate","power","creature","slapstick","anime","retro","family","kawaii","storybook","kids","adventure"]},"coverUrl":{"type":["string","null"]},"sampleUrl":{"type":["string","null"]},"loopUrl":{"type":["string","null"]},"dialect":{"type":"string"},"narrator":{"type":"boolean"},"ideas":{"type":"array","items":{"type":"object","properties":{"ar":{"type":"string","minLength":1},"en":{"type":"string","minLength":1}},"required":["ar","en"]}},"cast":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":40,"pattern":"^[a-z0-9-]+$"},"name":{"type":"object","properties":{"ar":{"type":"string","minLength":1},"en":{"type":"string","minLength":1}},"required":["ar","en"]},"appearance":{"type":"string","minLength":1,"maxLength":600,"description":"English description the image model draws (hair, outfit, colours, build)"},"personality":{"default":"","type":"string","maxLength":300},"gender":{"type":"string","enum":["male","female"]},"age":{"type":"string","enum":["child","teen","adult","elder"]},"voiceId":{"default":null,"description":"Default voice (Cartoon category)","anyOf":[{"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)$"},{"type":"null"}]},"voiceFx":{"default":"none","type":"string","enum":["none","chibi","giant","robot","alien","radio","echo","monster"]},"imageUrl":{"type":["string","null"]}},"required":["id","name","appearance","gender","age","imageUrl"]}},"locked":{"type":"boolean","description":"The plan does not include this theme (series need cartoonSeries)"},"order":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}},"required":["id","slug","kind","planet","name","tagline","colors","emoji","jingle","coverUrl","sampleUrl","loopUrl","dialect","narrator","ideas","cast","locked","order"]},"lengthSeconds":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"dialect":{"type":"string"},"aspectRatio":{"type":"string","enum":["9:16","16:9","1:1"]},"tier":{"type":"string"},"captions":{"type":"boolean"},"opening":{"type":"boolean"},"characters":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"role":{"type":"string"},"appearance":{"type":"string"},"personality":{"type":"string"},"gender":{"type":"string","enum":["male","female"]},"age":{"type":"string","enum":["child","teen","adult","elder"]},"voiceId":{"anyOf":[{"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)$"},{"type":"null"}]},"voiceFx":{"type":"string","enum":["none","chibi","giant","robot","alien","radio","echo","monster"]},"castId":{"type":["string","null"]},"sheetUrl":{"type":["string","null"]},"sheetStatus":{"type":"string","enum":["none","pending","ready","failed"]}},"required":["id","name","role","appearance","personality","gender","age","voiceId","voiceFx","castId","sheetUrl","sheetStatus"]}},"locations":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"ambience":{"type":"string"}},"required":["id","name","description","ambience"]}},"shots":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"locationId":{"type":["string","null"]},"camera":{"type":"string"},"action":{"type":"string","description":"English visual prompt"},"summary":{"description":"What the shot shows, one line in the episode language (the screenplay page shows it)","type":["string","null"]},"characters":{"type":"array","items":{"type":"string"}},"lines":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"speaker":{"type":"string","description":"A character id, or narrator"},"text":{"type":"string"},"emotion":{"type":"string"},"start":{"type":["number","null"]},"end":{"type":["number","null"]},"audioUrl":{"type":["string","null"]}},"required":["id","speaker","text","emotion","start","end","audioUrl"]}},"sfx":{"type":"array","items":{"type":"object","properties":{"what":{"type":"string"},"label":{"description":"Its name in the episode language","type":"string"},"tags":{"type":"array","items":{"type":"string"}},"at":{"type":"number"},"intensity":{"type":"string","enum":["soft","normal","big"]}},"required":["what","tags","at","intensity"]}},"music":{"type":"string","enum":["none","stinger","swell","tension","victory","sad","comic"]},"start":{"type":["number","null"]},"end":{"type":["number","null"]},"status":{"type":"string","enum":["pending","queued","rendering","ready","failed"]},"frameUrl":{"type":["string","null"]},"clipUrl":{"type":["string","null"]},"error":{"type":["string","null"]},"parentId":{"description":"Set on a shot split from a long one (it shares the parent still)","type":["string","null"]}},"required":["id","locationId","camera","action","summary","characters","lines","sfx","music","start","end","status","frameUrl","clipUrl","error","parentId"]}},"song":{"anyOf":[{"type":"object","properties":{"lyrics":{"type":"string"}},"required":["lyrics"]},{"type":"null"}]},"cues":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"lane":{"type":"string","enum":["sfx","foley","ambience","music"]},"label":{"type":"string"},"at":{"type":"number"},"duration":{"type":"number"},"gain":{"type":"number","description":"dB"},"pan":{"type":"number"},"muted":{"type":"boolean"},"source":{"type":"string","enum":["library","generated","synth"]},"soundId":{"anyOf":[{"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)$"},{"type":"null"}]},"url":{"type":["string","null"]},"shotId":{"type":["string","null"]},"generating":{"type":"boolean","description":"A new take is being made (regenerate)"},"alternatives":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"label":{"type":"string"},"source":{"type":"string","enum":["library","generated","synth"]},"url":{"type":["string","null"]}},"required":["id","label","source","url"]}}},"required":["id","lane","label","at","duration","gain","pan","muted","source","soundId","url","shotId","generating","alternatives"]}},"mix":{"type":"object","propertyNames":{"type":"string","enum":["dialogue","sfx","foley","ambience","music"]},"additionalProperties":{"type":"object","properties":{"gain":{"type":"number","minimum":-30,"maximum":12},"muted":{"type":"boolean"}},"required":["gain","muted"]},"required":["dialogue","sfx","foley","ambience","music"]},"duration":{"type":"number"},"creditsReserved":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"creditsCharged":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"regenerationsLeft":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"previousId":{"anyOf":[{"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)$"},{"type":"null"}]},"episode":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"output":{"anyOf":[{"type":"object","properties":{"videoUrl":{"type":["string","null"]},"downloadUrl":{"type":["string","null"]},"thumbnailUrl":{"type":["string","null"]},"watermarked":{"type":"boolean"},"generationId":{"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)$"},"duration":{"type":"number"},"stems":{"anyOf":[{"type":"object","propertyNames":{"type":"string","enum":["dialogue","sfx","foley","ambience","music"]},"additionalProperties":{"type":["string","null"]},"required":["dialogue","sfx","foley","ambience","music"]},{"type":"null"}],"description":"Signed WAV per lane (entitlement cartoonStems)"},"posterUrl":{"type":["string","null"]}},"required":["videoUrl","downloadUrl","thumbnailUrl","watermarked","generationId","duration","stems","posterUrl"]},{"type":"null"}]},"renderedAt":{"type":["string","null"]},"occasion":{"anyOf":[{"type":"string","enum":["birthday"]},{"type":"null"}],"description":"Set on a Birthday Hero video"},"hero":{"anyOf":[{"type":"object","properties":{"name":{"type":"string"},"age":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"gender":{"type":"string","enum":["boy","girl"]},"message":{"type":"string"},"details":{"type":"string"},"photoUrls":{"type":"array","items":{"type":"string"},"description":"Signed URLs of the uploaded photos (empty once deleted)"},"photosDeleted":{"type":"boolean"},"photosExpireAt":{"type":["string","null"]}},"required":["name","age","gender","message","details","photoUrls","photosDeleted","photosExpireAt"]},{"type":"null"}],"description":"The birthday child (Birthday Hero videos only)"}},"required":["id","createdAt","updatedAt","title","logline","idea","status","stage","progress","error","failedStage","errorPath","departments","mode","theme","lengthSeconds","dialect","aspectRatio","tier","captions","opening","characters","locations","shots","song","cues","mix","duration","creditsReserved","creditsCharged","regenerationsLeft","previousId","episode","output","renderedAt","occasion","hero"]},"example":{"id":"01990000-0000-7000-8000-000000000001","createdAt":"2026-09-19T12:00:00.000Z","updatedAt":"2026-09-19T12:00:00.000Z","title":"example","logline":"example","idea":"example","status":"writing","stage":"write","progress":1,"error":"example","failedStage":"write","errorPath":"example","departments":{"dialogue":1,"animation":1,"sound":1,"music":1,"mix":1},"mode":"auto","theme":{"id":"01990000-0000-7000-8000-000000000001","slug":"example","kind":"series","planet":"action","name":{"ar":"مثال","en":"example"},"tagline":{"ar":"مثال","en":"example"},"colors":{"from":"example","to":"example","accent":"example"},"emoji":"example","jingle":"mystery","coverUrl":"http://localhost:4000/example","sampleUrl":"http://localhost:4000/example","loopUrl":"http://localhost:4000/example","dialect":"ar-SA","narrator":true,"ideas":[{"ar":"مثال","en":"example"}],"cast":[{"id":"example","name":{"ar":"مثال","en":"example"},"appearance":"example","personality":"","gender":"male","age":"child","voiceId":null,"voiceFx":"none","imageUrl":"http://localhost:4000/example"}],"locked":true,"order":-9007199254740991},"lengthSeconds":-9007199254740991,"dialect":"ar-SA","aspectRatio":"9:16","tier":"example","captions":true,"opening":true,"characters":[{"id":"example","name":"Noura","role":"example","appearance":"example","personality":"example","gender":"male","age":"child","voiceId":"01990000-0000-7000-8000-000000000001","voiceFx":"none","castId":"example","sheetUrl":"http://localhost:4000/example","sheetStatus":"none"}],"locations":[{"id":"example","name":"Noura","description":"example","ambience":"example"}],"shots":[{"id":"example","locationId":"example","camera":"example","action":"example","summary":"example","characters":["example"],"lines":[{"id":"example","speaker":"example","text":"مرحباً بك في فوكلا.","emotion":"example","start":"example","end":"example","audioUrl":"http://localhost:4000/example"}],"sfx":[{"what":"example","label":"example","tags":["example"],"at":1,"intensity":"soft"}],"music":"none","start":"example","end":"example","status":"pending","frameUrl":"http://localhost:4000/example","clipUrl":"http://localhost:4000/example","error":"example","parentId":"example"}],"song":{"lyrics":"example"},"cues":[{"id":"example","lane":"sfx","label":"example","at":1,"duration":1,"gain":1,"pan":1,"muted":true,"source":"library","soundId":"01990000-0000-7000-8000-000000000001","url":"example","shotId":"example","generating":true,"alternatives":[{"id":"example","label":"example","source":"library","url":"example"}]}],"mix":{},"duration":1,"creditsReserved":-9007199254740991,"creditsCharged":-9007199254740991,"regenerationsLeft":-9007199254740991,"previousId":"01990000-0000-7000-8000-000000000001","episode":-9007199254740991,"output":{"videoUrl":"http://localhost:4000/example","downloadUrl":"http://localhost:4000/example","thumbnailUrl":"http://localhost:4000/example","watermarked":true,"generationId":"01990000-0000-7000-8000-000000000001","duration":1,"stems":{},"posterUrl":"http://localhost:4000/example"},"renderedAt":"2026-09-19T12:00:00.000Z","occasion":"birthday","hero":{"name":"Noura","age":-9007199254740991,"gender":"boy","message":"example","details":"example","photoUrls":["example"],"photosDeleted":true,"photosExpireAt":"2026-09-19T12:00:00.000Z"}}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/cartoon/projects/{id}/remix","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/cartoon/projects/{id}/remix","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/cartoon/projects/{id}/remix","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/cartoon/projects/{id}/remix","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/cartoon/projects/{id}/remix","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/cartoon/projects/{id}/remix","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/cartoon/projects/{id}/remix","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/cartoon/projects/{id}/remix","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/cartoon/projects/{id}/remix","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/cartoon/projects/{id}/remix","traceId":"request-id"}}}}}}},"/v1/cartoon/projects/{id}/cues/{cueId}/regenerate":{"post":{"operationId":"regenerateCartoonCue","tags":["Cartoon"],"summary":"Make a new take of one sound (funnier, bigger, softer, scarier or just different) for the sfxCredits price; it becomes the cue and the old one an alternative. Requires an Idempotency-Key header","description":"Requires workspace role editor or above. Retry with the same Idempotency-Key and identical body. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"cueId","in":"path","required":true,"schema":{"type":"string"}},{"name":"Idempotency-Key","in":"header","required":true,"schema":{"type":"string","maxLength":200},"example":"request-2026-001"},{"name":"X-CSRF-Token","in":"header","required":false,"description":"Required for cookie-authenticated mutations; returned by sign-in/sign-up.","schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"direction":{"default":"different","type":"string","enum":["funnier","bigger","softer","scarier","different"]}}},"example":{"direction":"different"}}}},"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","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)$"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"},"title":{"type":"string"},"logline":{"type":"string"},"idea":{"type":"string"},"status":{"type":"string","enum":["writing","scripted","casting","cast","storyboarding","storyboarded","producing","mixing","ready","failed"],"description":"scripted, cast and storyboarded wait for the person (director mode); one-click mode walks through them"},"stage":{"anyOf":[{"type":"string","enum":["write","sheets","storyboard","voice","render","poll","sound","mix"]},{"type":"null"}]},"progress":{"type":"number"},"error":{"description":"WRITE_FAILED, SHEETS_FAILED, STORYBOARD_FAILED, VOICE_FAILED, TOO_LONG, SCENE_FAILED, RENDER_FAILED, REMIX_FAILED; on a storyboard one-click could not produce: the refusal code (FORBIDDEN, INSUFFICIENT_CREDITS…) with errorPath","type":["string","null"]},"failedStage":{"anyOf":[{"type":"string","enum":["write","sheets","storyboard","voice","render","poll","sound","mix"]},{"type":"null"}]},"errorPath":{"description":"The plan limit that stopped one-click production (an entitlement key), for the upgrade prompt","type":["string","null"]},"departments":{"type":"object","properties":{"dialogue":{"type":"number"},"animation":{"type":"number"},"sound":{"type":"number"},"music":{"type":"number"},"mix":{"type":"number"}},"required":["dialogue","animation","sound","music","mix"],"description":"Progress 0..100 of each department while producing (the production floor)"},"mode":{"type":"string","enum":["auto","director"]},"theme":{"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)$"},"slug":{"type":"string"},"kind":{"type":"string","enum":["series","style"]},"planet":{"anyOf":[{"type":"string","enum":["action","adventure","sports","comedy","zumurruda","science","bonbon","heroes"]},{"type":"null"}]},"name":{"type":"object","properties":{"ar":{"type":"string","minLength":1},"en":{"type":"string","minLength":1}},"required":["ar","en"]},"tagline":{"type":"object","properties":{"ar":{"type":"string","minLength":1},"en":{"type":"string","minLength":1}},"required":["ar","en"]},"colors":{"type":"object","properties":{"from":{"type":"string","pattern":"^#[0-9a-fA-F]{6}$"},"to":{"type":"string","pattern":"^#[0-9a-fA-F]{6}$"},"accent":{"type":"string","pattern":"^#[0-9a-fA-F]{6}$"}},"required":["from","to","accent"]},"emoji":{"type":"string"},"jingle":{"type":"string","enum":["mystery","heroic","sports","mecha","tearjerker","pirate","power","creature","slapstick","anime","retro","family","kawaii","storybook","kids","adventure"]},"coverUrl":{"type":["string","null"]},"sampleUrl":{"type":["string","null"]},"loopUrl":{"type":["string","null"]},"dialect":{"type":"string"},"narrator":{"type":"boolean"},"ideas":{"type":"array","items":{"type":"object","properties":{"ar":{"type":"string","minLength":1},"en":{"type":"string","minLength":1}},"required":["ar","en"]}},"cast":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":40,"pattern":"^[a-z0-9-]+$"},"name":{"type":"object","properties":{"ar":{"type":"string","minLength":1},"en":{"type":"string","minLength":1}},"required":["ar","en"]},"appearance":{"type":"string","minLength":1,"maxLength":600,"description":"English description the image model draws (hair, outfit, colours, build)"},"personality":{"default":"","type":"string","maxLength":300},"gender":{"type":"string","enum":["male","female"]},"age":{"type":"string","enum":["child","teen","adult","elder"]},"voiceId":{"default":null,"description":"Default voice (Cartoon category)","anyOf":[{"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)$"},{"type":"null"}]},"voiceFx":{"default":"none","type":"string","enum":["none","chibi","giant","robot","alien","radio","echo","monster"]},"imageUrl":{"type":["string","null"]}},"required":["id","name","appearance","gender","age","imageUrl"]}},"locked":{"type":"boolean","description":"The plan does not include this theme (series need cartoonSeries)"},"order":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}},"required":["id","slug","kind","planet","name","tagline","colors","emoji","jingle","coverUrl","sampleUrl","loopUrl","dialect","narrator","ideas","cast","locked","order"]},"lengthSeconds":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"dialect":{"type":"string"},"aspectRatio":{"type":"string","enum":["9:16","16:9","1:1"]},"tier":{"type":"string"},"captions":{"type":"boolean"},"opening":{"type":"boolean"},"characters":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"role":{"type":"string"},"appearance":{"type":"string"},"personality":{"type":"string"},"gender":{"type":"string","enum":["male","female"]},"age":{"type":"string","enum":["child","teen","adult","elder"]},"voiceId":{"anyOf":[{"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)$"},{"type":"null"}]},"voiceFx":{"type":"string","enum":["none","chibi","giant","robot","alien","radio","echo","monster"]},"castId":{"type":["string","null"]},"sheetUrl":{"type":["string","null"]},"sheetStatus":{"type":"string","enum":["none","pending","ready","failed"]}},"required":["id","name","role","appearance","personality","gender","age","voiceId","voiceFx","castId","sheetUrl","sheetStatus"]}},"locations":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"ambience":{"type":"string"}},"required":["id","name","description","ambience"]}},"shots":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"locationId":{"type":["string","null"]},"camera":{"type":"string"},"action":{"type":"string","description":"English visual prompt"},"summary":{"description":"What the shot shows, one line in the episode language (the screenplay page shows it)","type":["string","null"]},"characters":{"type":"array","items":{"type":"string"}},"lines":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"speaker":{"type":"string","description":"A character id, or narrator"},"text":{"type":"string"},"emotion":{"type":"string"},"start":{"type":["number","null"]},"end":{"type":["number","null"]},"audioUrl":{"type":["string","null"]}},"required":["id","speaker","text","emotion","start","end","audioUrl"]}},"sfx":{"type":"array","items":{"type":"object","properties":{"what":{"type":"string"},"label":{"description":"Its name in the episode language","type":"string"},"tags":{"type":"array","items":{"type":"string"}},"at":{"type":"number"},"intensity":{"type":"string","enum":["soft","normal","big"]}},"required":["what","tags","at","intensity"]}},"music":{"type":"string","enum":["none","stinger","swell","tension","victory","sad","comic"]},"start":{"type":["number","null"]},"end":{"type":["number","null"]},"status":{"type":"string","enum":["pending","queued","rendering","ready","failed"]},"frameUrl":{"type":["string","null"]},"clipUrl":{"type":["string","null"]},"error":{"type":["string","null"]},"parentId":{"description":"Set on a shot split from a long one (it shares the parent still)","type":["string","null"]}},"required":["id","locationId","camera","action","summary","characters","lines","sfx","music","start","end","status","frameUrl","clipUrl","error","parentId"]}},"song":{"anyOf":[{"type":"object","properties":{"lyrics":{"type":"string"}},"required":["lyrics"]},{"type":"null"}]},"cues":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"lane":{"type":"string","enum":["sfx","foley","ambience","music"]},"label":{"type":"string"},"at":{"type":"number"},"duration":{"type":"number"},"gain":{"type":"number","description":"dB"},"pan":{"type":"number"},"muted":{"type":"boolean"},"source":{"type":"string","enum":["library","generated","synth"]},"soundId":{"anyOf":[{"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)$"},{"type":"null"}]},"url":{"type":["string","null"]},"shotId":{"type":["string","null"]},"generating":{"type":"boolean","description":"A new take is being made (regenerate)"},"alternatives":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"label":{"type":"string"},"source":{"type":"string","enum":["library","generated","synth"]},"url":{"type":["string","null"]}},"required":["id","label","source","url"]}}},"required":["id","lane","label","at","duration","gain","pan","muted","source","soundId","url","shotId","generating","alternatives"]}},"mix":{"type":"object","propertyNames":{"type":"string","enum":["dialogue","sfx","foley","ambience","music"]},"additionalProperties":{"type":"object","properties":{"gain":{"type":"number","minimum":-30,"maximum":12},"muted":{"type":"boolean"}},"required":["gain","muted"]},"required":["dialogue","sfx","foley","ambience","music"]},"duration":{"type":"number"},"creditsReserved":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"creditsCharged":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"regenerationsLeft":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"previousId":{"anyOf":[{"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)$"},{"type":"null"}]},"episode":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"output":{"anyOf":[{"type":"object","properties":{"videoUrl":{"type":["string","null"]},"downloadUrl":{"type":["string","null"]},"thumbnailUrl":{"type":["string","null"]},"watermarked":{"type":"boolean"},"generationId":{"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)$"},"duration":{"type":"number"},"stems":{"anyOf":[{"type":"object","propertyNames":{"type":"string","enum":["dialogue","sfx","foley","ambience","music"]},"additionalProperties":{"type":["string","null"]},"required":["dialogue","sfx","foley","ambience","music"]},{"type":"null"}],"description":"Signed WAV per lane (entitlement cartoonStems)"},"posterUrl":{"type":["string","null"]}},"required":["videoUrl","downloadUrl","thumbnailUrl","watermarked","generationId","duration","stems","posterUrl"]},{"type":"null"}]},"renderedAt":{"type":["string","null"]},"occasion":{"anyOf":[{"type":"string","enum":["birthday"]},{"type":"null"}],"description":"Set on a Birthday Hero video"},"hero":{"anyOf":[{"type":"object","properties":{"name":{"type":"string"},"age":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"gender":{"type":"string","enum":["boy","girl"]},"message":{"type":"string"},"details":{"type":"string"},"photoUrls":{"type":"array","items":{"type":"string"},"description":"Signed URLs of the uploaded photos (empty once deleted)"},"photosDeleted":{"type":"boolean"},"photosExpireAt":{"type":["string","null"]}},"required":["name","age","gender","message","details","photoUrls","photosDeleted","photosExpireAt"]},{"type":"null"}],"description":"The birthday child (Birthday Hero videos only)"}},"required":["id","createdAt","updatedAt","title","logline","idea","status","stage","progress","error","failedStage","errorPath","departments","mode","theme","lengthSeconds","dialect","aspectRatio","tier","captions","opening","characters","locations","shots","song","cues","mix","duration","creditsReserved","creditsCharged","regenerationsLeft","previousId","episode","output","renderedAt","occasion","hero"]},"example":{"id":"01990000-0000-7000-8000-000000000001","createdAt":"2026-09-19T12:00:00.000Z","updatedAt":"2026-09-19T12:00:00.000Z","title":"example","logline":"example","idea":"example","status":"writing","stage":"write","progress":1,"error":"example","failedStage":"write","errorPath":"example","departments":{"dialogue":1,"animation":1,"sound":1,"music":1,"mix":1},"mode":"auto","theme":{"id":"01990000-0000-7000-8000-000000000001","slug":"example","kind":"series","planet":"action","name":{"ar":"مثال","en":"example"},"tagline":{"ar":"مثال","en":"example"},"colors":{"from":"example","to":"example","accent":"example"},"emoji":"example","jingle":"mystery","coverUrl":"http://localhost:4000/example","sampleUrl":"http://localhost:4000/example","loopUrl":"http://localhost:4000/example","dialect":"ar-SA","narrator":true,"ideas":[{"ar":"مثال","en":"example"}],"cast":[{"id":"example","name":{"ar":"مثال","en":"example"},"appearance":"example","personality":"","gender":"male","age":"child","voiceId":null,"voiceFx":"none","imageUrl":"http://localhost:4000/example"}],"locked":true,"order":-9007199254740991},"lengthSeconds":-9007199254740991,"dialect":"ar-SA","aspectRatio":"9:16","tier":"example","captions":true,"opening":true,"characters":[{"id":"example","name":"Noura","role":"example","appearance":"example","personality":"example","gender":"male","age":"child","voiceId":"01990000-0000-7000-8000-000000000001","voiceFx":"none","castId":"example","sheetUrl":"http://localhost:4000/example","sheetStatus":"none"}],"locations":[{"id":"example","name":"Noura","description":"example","ambience":"example"}],"shots":[{"id":"example","locationId":"example","camera":"example","action":"example","summary":"example","characters":["example"],"lines":[{"id":"example","speaker":"example","text":"مرحباً بك في فوكلا.","emotion":"example","start":"example","end":"example","audioUrl":"http://localhost:4000/example"}],"sfx":[{"what":"example","label":"example","tags":["example"],"at":1,"intensity":"soft"}],"music":"none","start":"example","end":"example","status":"pending","frameUrl":"http://localhost:4000/example","clipUrl":"http://localhost:4000/example","error":"example","parentId":"example"}],"song":{"lyrics":"example"},"cues":[{"id":"example","lane":"sfx","label":"example","at":1,"duration":1,"gain":1,"pan":1,"muted":true,"source":"library","soundId":"01990000-0000-7000-8000-000000000001","url":"example","shotId":"example","generating":true,"alternatives":[{"id":"example","label":"example","source":"library","url":"example"}]}],"mix":{},"duration":1,"creditsReserved":-9007199254740991,"creditsCharged":-9007199254740991,"regenerationsLeft":-9007199254740991,"previousId":"01990000-0000-7000-8000-000000000001","episode":-9007199254740991,"output":{"videoUrl":"http://localhost:4000/example","downloadUrl":"http://localhost:4000/example","thumbnailUrl":"http://localhost:4000/example","watermarked":true,"generationId":"01990000-0000-7000-8000-000000000001","duration":1,"stems":{},"posterUrl":"http://localhost:4000/example"},"renderedAt":"2026-09-19T12:00:00.000Z","occasion":"birthday","hero":{"name":"Noura","age":-9007199254740991,"gender":"boy","message":"example","details":"example","photoUrls":["example"],"photosDeleted":true,"photosExpireAt":"2026-09-19T12:00:00.000Z"}}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/cartoon/projects/{id}/cues/{cueId}/regenerate","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/cartoon/projects/{id}/cues/{cueId}/regenerate","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/cartoon/projects/{id}/cues/{cueId}/regenerate","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/cartoon/projects/{id}/cues/{cueId}/regenerate","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/cartoon/projects/{id}/cues/{cueId}/regenerate","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/cartoon/projects/{id}/cues/{cueId}/regenerate","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/cartoon/projects/{id}/cues/{cueId}/regenerate","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/cartoon/projects/{id}/cues/{cueId}/regenerate","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/cartoon/projects/{id}/cues/{cueId}/regenerate","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/cartoon/projects/{id}/cues/{cueId}/regenerate","traceId":"request-id"}}}}}}},"/v1/cartoon/projects/{id}/next":{"post":{"operationId":"nextCartoonEpisode","tags":["Cartoon"],"summary":"The next episode: same theme, cast, character sheets and world, continuing the story","description":"Requires workspace role editor or above. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"X-CSRF-Token","in":"header","required":false,"description":"Required for cookie-authenticated mutations; returned by sign-in/sign-up.","schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"idea":{"type":"string","minLength":3,"maxLength":1500},"lengthSeconds":{"anyOf":[{"type":"number","const":20},{"type":"number","const":30},{"type":"number","const":45},{"type":"number","const":60},{"type":"number","const":90},{"type":"number","const":120},{"type":"number","const":150},{"type":"number","const":180}]},"mode":{"type":"string","enum":["auto","director"]}},"required":["idea"]},"example":{"idea":"example","lengthSeconds":20,"mode":"auto"}}}},"responses":{"201":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","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)$"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"},"title":{"type":"string"},"logline":{"type":"string"},"idea":{"type":"string"},"status":{"type":"string","enum":["writing","scripted","casting","cast","storyboarding","storyboarded","producing","mixing","ready","failed"],"description":"scripted, cast and storyboarded wait for the person (director mode); one-click mode walks through them"},"stage":{"anyOf":[{"type":"string","enum":["write","sheets","storyboard","voice","render","poll","sound","mix"]},{"type":"null"}]},"progress":{"type":"number"},"error":{"description":"WRITE_FAILED, SHEETS_FAILED, STORYBOARD_FAILED, VOICE_FAILED, TOO_LONG, SCENE_FAILED, RENDER_FAILED, REMIX_FAILED; on a storyboard one-click could not produce: the refusal code (FORBIDDEN, INSUFFICIENT_CREDITS…) with errorPath","type":["string","null"]},"failedStage":{"anyOf":[{"type":"string","enum":["write","sheets","storyboard","voice","render","poll","sound","mix"]},{"type":"null"}]},"errorPath":{"description":"The plan limit that stopped one-click production (an entitlement key), for the upgrade prompt","type":["string","null"]},"departments":{"type":"object","properties":{"dialogue":{"type":"number"},"animation":{"type":"number"},"sound":{"type":"number"},"music":{"type":"number"},"mix":{"type":"number"}},"required":["dialogue","animation","sound","music","mix"],"description":"Progress 0..100 of each department while producing (the production floor)"},"mode":{"type":"string","enum":["auto","director"]},"theme":{"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)$"},"slug":{"type":"string"},"kind":{"type":"string","enum":["series","style"]},"planet":{"anyOf":[{"type":"string","enum":["action","adventure","sports","comedy","zumurruda","science","bonbon","heroes"]},{"type":"null"}]},"name":{"type":"object","properties":{"ar":{"type":"string","minLength":1},"en":{"type":"string","minLength":1}},"required":["ar","en"]},"tagline":{"type":"object","properties":{"ar":{"type":"string","minLength":1},"en":{"type":"string","minLength":1}},"required":["ar","en"]},"colors":{"type":"object","properties":{"from":{"type":"string","pattern":"^#[0-9a-fA-F]{6}$"},"to":{"type":"string","pattern":"^#[0-9a-fA-F]{6}$"},"accent":{"type":"string","pattern":"^#[0-9a-fA-F]{6}$"}},"required":["from","to","accent"]},"emoji":{"type":"string"},"jingle":{"type":"string","enum":["mystery","heroic","sports","mecha","tearjerker","pirate","power","creature","slapstick","anime","retro","family","kawaii","storybook","kids","adventure"]},"coverUrl":{"type":["string","null"]},"sampleUrl":{"type":["string","null"]},"loopUrl":{"type":["string","null"]},"dialect":{"type":"string"},"narrator":{"type":"boolean"},"ideas":{"type":"array","items":{"type":"object","properties":{"ar":{"type":"string","minLength":1},"en":{"type":"string","minLength":1}},"required":["ar","en"]}},"cast":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":40,"pattern":"^[a-z0-9-]+$"},"name":{"type":"object","properties":{"ar":{"type":"string","minLength":1},"en":{"type":"string","minLength":1}},"required":["ar","en"]},"appearance":{"type":"string","minLength":1,"maxLength":600,"description":"English description the image model draws (hair, outfit, colours, build)"},"personality":{"default":"","type":"string","maxLength":300},"gender":{"type":"string","enum":["male","female"]},"age":{"type":"string","enum":["child","teen","adult","elder"]},"voiceId":{"default":null,"description":"Default voice (Cartoon category)","anyOf":[{"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)$"},{"type":"null"}]},"voiceFx":{"default":"none","type":"string","enum":["none","chibi","giant","robot","alien","radio","echo","monster"]},"imageUrl":{"type":["string","null"]}},"required":["id","name","appearance","gender","age","imageUrl"]}},"locked":{"type":"boolean","description":"The plan does not include this theme (series need cartoonSeries)"},"order":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}},"required":["id","slug","kind","planet","name","tagline","colors","emoji","jingle","coverUrl","sampleUrl","loopUrl","dialect","narrator","ideas","cast","locked","order"]},"lengthSeconds":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"dialect":{"type":"string"},"aspectRatio":{"type":"string","enum":["9:16","16:9","1:1"]},"tier":{"type":"string"},"captions":{"type":"boolean"},"opening":{"type":"boolean"},"characters":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"role":{"type":"string"},"appearance":{"type":"string"},"personality":{"type":"string"},"gender":{"type":"string","enum":["male","female"]},"age":{"type":"string","enum":["child","teen","adult","elder"]},"voiceId":{"anyOf":[{"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)$"},{"type":"null"}]},"voiceFx":{"type":"string","enum":["none","chibi","giant","robot","alien","radio","echo","monster"]},"castId":{"type":["string","null"]},"sheetUrl":{"type":["string","null"]},"sheetStatus":{"type":"string","enum":["none","pending","ready","failed"]}},"required":["id","name","role","appearance","personality","gender","age","voiceId","voiceFx","castId","sheetUrl","sheetStatus"]}},"locations":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"ambience":{"type":"string"}},"required":["id","name","description","ambience"]}},"shots":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"locationId":{"type":["string","null"]},"camera":{"type":"string"},"action":{"type":"string","description":"English visual prompt"},"summary":{"description":"What the shot shows, one line in the episode language (the screenplay page shows it)","type":["string","null"]},"characters":{"type":"array","items":{"type":"string"}},"lines":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"speaker":{"type":"string","description":"A character id, or narrator"},"text":{"type":"string"},"emotion":{"type":"string"},"start":{"type":["number","null"]},"end":{"type":["number","null"]},"audioUrl":{"type":["string","null"]}},"required":["id","speaker","text","emotion","start","end","audioUrl"]}},"sfx":{"type":"array","items":{"type":"object","properties":{"what":{"type":"string"},"label":{"description":"Its name in the episode language","type":"string"},"tags":{"type":"array","items":{"type":"string"}},"at":{"type":"number"},"intensity":{"type":"string","enum":["soft","normal","big"]}},"required":["what","tags","at","intensity"]}},"music":{"type":"string","enum":["none","stinger","swell","tension","victory","sad","comic"]},"start":{"type":["number","null"]},"end":{"type":["number","null"]},"status":{"type":"string","enum":["pending","queued","rendering","ready","failed"]},"frameUrl":{"type":["string","null"]},"clipUrl":{"type":["string","null"]},"error":{"type":["string","null"]},"parentId":{"description":"Set on a shot split from a long one (it shares the parent still)","type":["string","null"]}},"required":["id","locationId","camera","action","summary","characters","lines","sfx","music","start","end","status","frameUrl","clipUrl","error","parentId"]}},"song":{"anyOf":[{"type":"object","properties":{"lyrics":{"type":"string"}},"required":["lyrics"]},{"type":"null"}]},"cues":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"lane":{"type":"string","enum":["sfx","foley","ambience","music"]},"label":{"type":"string"},"at":{"type":"number"},"duration":{"type":"number"},"gain":{"type":"number","description":"dB"},"pan":{"type":"number"},"muted":{"type":"boolean"},"source":{"type":"string","enum":["library","generated","synth"]},"soundId":{"anyOf":[{"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)$"},{"type":"null"}]},"url":{"type":["string","null"]},"shotId":{"type":["string","null"]},"generating":{"type":"boolean","description":"A new take is being made (regenerate)"},"alternatives":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"label":{"type":"string"},"source":{"type":"string","enum":["library","generated","synth"]},"url":{"type":["string","null"]}},"required":["id","label","source","url"]}}},"required":["id","lane","label","at","duration","gain","pan","muted","source","soundId","url","shotId","generating","alternatives"]}},"mix":{"type":"object","propertyNames":{"type":"string","enum":["dialogue","sfx","foley","ambience","music"]},"additionalProperties":{"type":"object","properties":{"gain":{"type":"number","minimum":-30,"maximum":12},"muted":{"type":"boolean"}},"required":["gain","muted"]},"required":["dialogue","sfx","foley","ambience","music"]},"duration":{"type":"number"},"creditsReserved":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"creditsCharged":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"regenerationsLeft":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"previousId":{"anyOf":[{"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)$"},{"type":"null"}]},"episode":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"output":{"anyOf":[{"type":"object","properties":{"videoUrl":{"type":["string","null"]},"downloadUrl":{"type":["string","null"]},"thumbnailUrl":{"type":["string","null"]},"watermarked":{"type":"boolean"},"generationId":{"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)$"},"duration":{"type":"number"},"stems":{"anyOf":[{"type":"object","propertyNames":{"type":"string","enum":["dialogue","sfx","foley","ambience","music"]},"additionalProperties":{"type":["string","null"]},"required":["dialogue","sfx","foley","ambience","music"]},{"type":"null"}],"description":"Signed WAV per lane (entitlement cartoonStems)"},"posterUrl":{"type":["string","null"]}},"required":["videoUrl","downloadUrl","thumbnailUrl","watermarked","generationId","duration","stems","posterUrl"]},{"type":"null"}]},"renderedAt":{"type":["string","null"]},"occasion":{"anyOf":[{"type":"string","enum":["birthday"]},{"type":"null"}],"description":"Set on a Birthday Hero video"},"hero":{"anyOf":[{"type":"object","properties":{"name":{"type":"string"},"age":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"gender":{"type":"string","enum":["boy","girl"]},"message":{"type":"string"},"details":{"type":"string"},"photoUrls":{"type":"array","items":{"type":"string"},"description":"Signed URLs of the uploaded photos (empty once deleted)"},"photosDeleted":{"type":"boolean"},"photosExpireAt":{"type":["string","null"]}},"required":["name","age","gender","message","details","photoUrls","photosDeleted","photosExpireAt"]},{"type":"null"}],"description":"The birthday child (Birthday Hero videos only)"}},"required":["id","createdAt","updatedAt","title","logline","idea","status","stage","progress","error","failedStage","errorPath","departments","mode","theme","lengthSeconds","dialect","aspectRatio","tier","captions","opening","characters","locations","shots","song","cues","mix","duration","creditsReserved","creditsCharged","regenerationsLeft","previousId","episode","output","renderedAt","occasion","hero"]},"example":{"id":"01990000-0000-7000-8000-000000000001","createdAt":"2026-09-19T12:00:00.000Z","updatedAt":"2026-09-19T12:00:00.000Z","title":"example","logline":"example","idea":"example","status":"writing","stage":"write","progress":1,"error":"example","failedStage":"write","errorPath":"example","departments":{"dialogue":1,"animation":1,"sound":1,"music":1,"mix":1},"mode":"auto","theme":{"id":"01990000-0000-7000-8000-000000000001","slug":"example","kind":"series","planet":"action","name":{"ar":"مثال","en":"example"},"tagline":{"ar":"مثال","en":"example"},"colors":{"from":"example","to":"example","accent":"example"},"emoji":"example","jingle":"mystery","coverUrl":"http://localhost:4000/example","sampleUrl":"http://localhost:4000/example","loopUrl":"http://localhost:4000/example","dialect":"ar-SA","narrator":true,"ideas":[{"ar":"مثال","en":"example"}],"cast":[{"id":"example","name":{"ar":"مثال","en":"example"},"appearance":"example","personality":"","gender":"male","age":"child","voiceId":null,"voiceFx":"none","imageUrl":"http://localhost:4000/example"}],"locked":true,"order":-9007199254740991},"lengthSeconds":-9007199254740991,"dialect":"ar-SA","aspectRatio":"9:16","tier":"example","captions":true,"opening":true,"characters":[{"id":"example","name":"Noura","role":"example","appearance":"example","personality":"example","gender":"male","age":"child","voiceId":"01990000-0000-7000-8000-000000000001","voiceFx":"none","castId":"example","sheetUrl":"http://localhost:4000/example","sheetStatus":"none"}],"locations":[{"id":"example","name":"Noura","description":"example","ambience":"example"}],"shots":[{"id":"example","locationId":"example","camera":"example","action":"example","summary":"example","characters":["example"],"lines":[{"id":"example","speaker":"example","text":"مرحباً بك في فوكلا.","emotion":"example","start":"example","end":"example","audioUrl":"http://localhost:4000/example"}],"sfx":[{"what":"example","label":"example","tags":["example"],"at":1,"intensity":"soft"}],"music":"none","start":"example","end":"example","status":"pending","frameUrl":"http://localhost:4000/example","clipUrl":"http://localhost:4000/example","error":"example","parentId":"example"}],"song":{"lyrics":"example"},"cues":[{"id":"example","lane":"sfx","label":"example","at":1,"duration":1,"gain":1,"pan":1,"muted":true,"source":"library","soundId":"01990000-0000-7000-8000-000000000001","url":"example","shotId":"example","generating":true,"alternatives":[{"id":"example","label":"example","source":"library","url":"example"}]}],"mix":{},"duration":1,"creditsReserved":-9007199254740991,"creditsCharged":-9007199254740991,"regenerationsLeft":-9007199254740991,"previousId":"01990000-0000-7000-8000-000000000001","episode":-9007199254740991,"output":{"videoUrl":"http://localhost:4000/example","downloadUrl":"http://localhost:4000/example","thumbnailUrl":"http://localhost:4000/example","watermarked":true,"generationId":"01990000-0000-7000-8000-000000000001","duration":1,"stems":{},"posterUrl":"http://localhost:4000/example"},"renderedAt":"2026-09-19T12:00:00.000Z","occasion":"birthday","hero":{"name":"Noura","age":-9007199254740991,"gender":"boy","message":"example","details":"example","photoUrls":["example"],"photosDeleted":true,"photosExpireAt":"2026-09-19T12:00:00.000Z"}}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/cartoon/projects/{id}/next","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/cartoon/projects/{id}/next","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/cartoon/projects/{id}/next","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/cartoon/projects/{id}/next","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/cartoon/projects/{id}/next","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/cartoon/projects/{id}/next","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/cartoon/projects/{id}/next","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/cartoon/projects/{id}/next","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/cartoon/projects/{id}/next","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/cartoon/projects/{id}/next","traceId":"request-id"}}}}}}},"/v1/birthday-hero/options":{"get":{"operationId":"getBirthdayOptions","tags":["Cartoon"],"summary":"Birthday Hero: lengths, estimated credits per length, photo limits","description":"Requires workspace role viewer or above. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false}],"security":[{"session":[]},{"apiKey":[]}],"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"lengths":{"type":"array","items":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}},"estimates":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"description":"Estimated credits per length in seconds"},"maxPhotos":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"photoDays":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"available":{"type":"boolean","description":"Animation is configured"},"defaultDialect":{"type":"string"}},"required":["lengths","estimates","maxPhotos","photoDays","available","defaultDialect"]},"example":{"lengths":[-9007199254740991],"estimates":{},"maxPhotos":-9007199254740991,"photoDays":-9007199254740991,"available":true,"defaultDialect":"example"}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/birthday-hero/options","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/birthday-hero/options","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/birthday-hero/options","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/birthday-hero/options","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/birthday-hero/options","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/birthday-hero/options","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/birthday-hero/options","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/birthday-hero/options","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/birthday-hero/options","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/birthday-hero/options","traceId":"request-id"}}}}}}},"/v1/birthday-hero/adventures":{"get":{"operationId":"listBirthdayAdventures","tags":["Cartoon"],"summary":"Birthday Hero adventures (superhero, snow village, space, football…) in display order","description":"Requires workspace role viewer or above. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false}],"security":[{"session":[]},{"apiKey":[]}],"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"items":{"type":"array","items":{"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)$"},"slug":{"type":"string"},"kind":{"type":"string","enum":["series","style"]},"planet":{"anyOf":[{"type":"string","enum":["action","adventure","sports","comedy","zumurruda","science","bonbon","heroes"]},{"type":"null"}]},"name":{"type":"object","properties":{"ar":{"type":"string","minLength":1},"en":{"type":"string","minLength":1}},"required":["ar","en"]},"tagline":{"type":"object","properties":{"ar":{"type":"string","minLength":1},"en":{"type":"string","minLength":1}},"required":["ar","en"]},"colors":{"type":"object","properties":{"from":{"type":"string","pattern":"^#[0-9a-fA-F]{6}$"},"to":{"type":"string","pattern":"^#[0-9a-fA-F]{6}$"},"accent":{"type":"string","pattern":"^#[0-9a-fA-F]{6}$"}},"required":["from","to","accent"]},"emoji":{"type":"string"},"jingle":{"type":"string","enum":["mystery","heroic","sports","mecha","tearjerker","pirate","power","creature","slapstick","anime","retro","family","kawaii","storybook","kids","adventure"]},"coverUrl":{"type":["string","null"]},"sampleUrl":{"type":["string","null"]},"loopUrl":{"type":["string","null"]},"dialect":{"type":"string"},"narrator":{"type":"boolean"},"ideas":{"type":"array","items":{"type":"object","properties":{"ar":{"type":"string","minLength":1},"en":{"type":"string","minLength":1}},"required":["ar","en"]}},"cast":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":40,"pattern":"^[a-z0-9-]+$"},"name":{"type":"object","properties":{"ar":{"type":"string","minLength":1},"en":{"type":"string","minLength":1}},"required":["ar","en"]},"appearance":{"type":"string","minLength":1,"maxLength":600,"description":"English description the image model draws (hair, outfit, colours, build)"},"personality":{"default":"","type":"string","maxLength":300},"gender":{"type":"string","enum":["male","female"]},"age":{"type":"string","enum":["child","teen","adult","elder"]},"voiceId":{"default":null,"description":"Default voice (Cartoon category)","anyOf":[{"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)$"},{"type":"null"}]},"voiceFx":{"default":"none","type":"string","enum":["none","chibi","giant","robot","alien","radio","echo","monster"]},"imageUrl":{"type":["string","null"]}},"required":["id","name","appearance","gender","age","imageUrl"]}},"locked":{"type":"boolean","description":"The plan does not include this theme (series need cartoonSeries)"},"order":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}},"required":["id","slug","kind","planet","name","tagline","colors","emoji","jingle","coverUrl","sampleUrl","loopUrl","dialect","narrator","ideas","cast","locked","order"]}}},"required":["items"]},"example":{"items":[{"id":"01990000-0000-7000-8000-000000000001","slug":"example","kind":"series","planet":"action","name":{"ar":"مثال","en":"example"},"tagline":{"ar":"مثال","en":"example"},"colors":{"from":"example","to":"example","accent":"example"},"emoji":"example","jingle":"mystery","coverUrl":"http://localhost:4000/example","sampleUrl":"http://localhost:4000/example","loopUrl":"http://localhost:4000/example","dialect":"ar-SA","narrator":true,"ideas":[{"ar":"مثال","en":"example"}],"cast":[{"id":"example","name":{"ar":"مثال","en":"example"},"appearance":"example","personality":"","gender":"male","age":"child","voiceId":null,"voiceFx":"none","imageUrl":"http://localhost:4000/example"}],"locked":true,"order":-9007199254740991}]}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/birthday-hero/adventures","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/birthday-hero/adventures","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/birthday-hero/adventures","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/birthday-hero/adventures","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/birthday-hero/adventures","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/birthday-hero/adventures","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/birthday-hero/adventures","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/birthday-hero/adventures","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/birthday-hero/adventures","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/birthday-hero/adventures","traceId":"request-id"}}}}}}},"/v1/phone-menus":{"get":{"operationId":"listPhoneMenus","tags":["Phone menus"],"summary":"Phone menu packs of the workspace, last changed first, with generation counts","description":"Requires workspace role viewer or above. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false}],"security":[{"session":[]},{"apiKey":[]}],"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"items":{"type":"array","items":{"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)$"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"},"name":{"type":"string","minLength":1,"maxLength":120},"companyName":{"type":"string","maxLength":120},"voiceId":{"anyOf":[{"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)$"},{"type":"null"}]},"productModelId":{"anyOf":[{"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)$"},{"type":"null"}]},"locale":{"type":"string","maxLength":20},"dialect":{"anyOf":[{"type":"string","maxLength":20},{"type":"null"}]},"params":{"type":"object","properties":{"speed":{"type":"number","minimum":0,"maximum":100},"consistency":{"type":"number","minimum":0,"maximum":100},"voiceMatch":{"type":"number","minimum":0,"maximum":100},"expressiveness":{"type":"number","minimum":0,"maximum":100},"clarity":{"type":"number","minimum":0,"maximum":100},"energyMode":{"type":"string","enum":["normal","boost"]}}},"instructions":{"type":"string","maxLength":500},"variables":{"type":"object","properties":{"hours":{"type":"string","maxLength":200},"website":{"type":"string","maxLength":200},"phone":{"type":"string","maxLength":60}}},"templateId":{"anyOf":[{"type":"string","enum":["clinic","bank","restaurant","government","ecommerce","afterHours"]},{"type":"null"}]},"wording":{"type":"string","enum":["gulf","msa"]},"voice":{"anyOf":[{"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)$"},"name":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"string"}},"imageUrl":{"type":["string","null"]}},"required":["id","name"],"additionalProperties":{}},{"type":"null"}]},"stats":{"type":"object","properties":{"total":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"generated":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"changed":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"pending":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"failed":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"seconds":{"type":"number"}},"required":["total","generated","changed","pending","failed","seconds"]},"locked":{"type":"boolean","description":"The plan no longer includes phone menu packs: viewing and exporting only"}},"required":["id","createdAt","updatedAt","name","companyName","voiceId","productModelId","locale","dialect","params","instructions","variables","templateId","wording","voice","stats","locked"],"additionalProperties":{}}},"available":{"type":"boolean","description":"The plan includes phone menu packs (ivrPack)"}},"required":["items","available"]},"example":{"items":[{"id":"01990000-0000-7000-8000-000000000001","createdAt":"2026-09-19T12:00:00.000Z","updatedAt":"2026-09-19T12:00:00.000Z","name":"Noura","companyName":"example","voiceId":"01990000-0000-7000-8000-000000000001","productModelId":"01990000-0000-7000-8000-000000000001","locale":"ar-SA","dialect":"ar-SA","params":{"speed":0,"consistency":0,"voiceMatch":0,"expressiveness":0,"clarity":0,"energyMode":"normal"},"instructions":"example","variables":{"hours":"example","website":"example","phone":"example"},"templateId":"clinic","wording":"gulf","voice":{"id":"01990000-0000-7000-8000-000000000001","name":{},"imageUrl":"http://localhost:4000/example"},"stats":{"total":-9007199254740991,"generated":-9007199254740991,"changed":-9007199254740991,"pending":-9007199254740991,"failed":-9007199254740991,"seconds":1},"locked":true}],"available":true}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/phone-menus","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/phone-menus","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/phone-menus","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/phone-menus","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/phone-menus","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/phone-menus","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/phone-menus","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/phone-menus","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/phone-menus","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/phone-menus","traceId":"request-id"}}}}}},"post":{"operationId":"createPhoneMenu","tags":["Phone menus"],"summary":"Create a pack (name, company, voice, dialect, settings, prompts); 403 ivrPack/plan without the plan switch","description":"Requires workspace role editor or above. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"X-CSRF-Token","in":"header","required":false,"description":"Required for cookie-authenticated mutations; returned by sign-in/sign-up.","schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":120},"companyName":{"default":"","type":"string","maxLength":120},"voiceId":{"default":null,"anyOf":[{"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)$"},{"type":"null"}]},"productModelId":{"default":null,"anyOf":[{"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)$"},{"type":"null"}]},"locale":{"default":"ar-SA","type":"string","maxLength":20},"dialect":{"default":null,"anyOf":[{"type":"string","maxLength":20},{"type":"null"}]},"params":{"default":{},"type":"object","properties":{"speed":{"type":"number","minimum":0,"maximum":100},"consistency":{"type":"number","minimum":0,"maximum":100},"voiceMatch":{"type":"number","minimum":0,"maximum":100},"expressiveness":{"type":"number","minimum":0,"maximum":100},"clarity":{"type":"number","minimum":0,"maximum":100},"energyMode":{"type":"string","enum":["normal","boost"]}}},"instructions":{"default":"","type":"string","maxLength":500},"variables":{"default":{},"type":"object","properties":{"hours":{"type":"string","maxLength":200},"website":{"type":"string","maxLength":200},"phone":{"type":"string","maxLength":60}}},"templateId":{"default":null,"anyOf":[{"type":"string","enum":["clinic","bank","restaurant","government","ecommerce","afterHours"]},{"type":"null"}]},"wording":{"default":"gulf","type":"string","enum":["gulf","msa"]},"prompts":{"default":[],"maxItems":200,"type":"array","items":{"type":"object","properties":{"id":{"type":"string","pattern":"^[A-Za-z0-9_-]{1,40}$","description":"Stable id chosen by the client (kept across edits; generations are tracked by it)"},"key":{"type":"string","pattern":"^[A-Za-z0-9][A-Za-z0-9_-]{0,63}$","description":"File name without extension, e.g. welcome, menu_main, opt_1_appointments"},"text":{"type":"string","maxLength":1500,"description":"What is spoken; {company}, {hours}, {website} and {phone} are filled from the pack"},"notes":{"default":"","type":"string","maxLength":500},"parentId":{"default":null,"description":"The menu prompt this one follows (null: a starting prompt)","anyOf":[{"type":"string","pattern":"^[A-Za-z0-9_-]{1,40}$"},{"type":"null"}]},"digit":{"default":null,"description":"Key pressed in the parent menu to reach it; null: plays right after the parent","anyOf":[{"type":"string","enum":["0","1","2","3","4","5","6","7","8","9","*","#"]},{"type":"null"}]},"title":{"description":"Friendly name shown on the call map (not spoken); default: from the key","type":"string","maxLength":80},"action":{"description":"What happens after this message when it has no key options (ignored on a menu)","anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["transfer","voicemail","hangup","back","repeat"],"description":"transfer to a person or number, take a voicemail, hang up, go back to the menu above, repeat the menu"},"target":{"description":"transfer: who or which number/extension, e.g. \"Reception · 100\"","type":"string","maxLength":80}},"required":["type"]},{"type":"null"}]},"noKey":{"description":"A menu: what happens when the caller presses nothing (default repeat once, then goodbye)","anyOf":[{"type":"string","enum":["repeat","goodbye","transfer"]},{"type":"null"}]}},"required":["id","key","text"]}}},"required":["name"]},"example":{"name":"Noura","companyName":"","voiceId":null,"productModelId":null,"locale":"ar-SA","dialect":null,"params":{},"instructions":"","variables":{},"templateId":null,"wording":"gulf","prompts":[]}}}},"responses":{"201":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","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)$"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"},"name":{"type":"string","minLength":1,"maxLength":120},"companyName":{"type":"string","maxLength":120},"voiceId":{"anyOf":[{"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)$"},{"type":"null"}]},"productModelId":{"anyOf":[{"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)$"},{"type":"null"}]},"locale":{"type":"string","maxLength":20},"dialect":{"anyOf":[{"type":"string","maxLength":20},{"type":"null"}]},"params":{"type":"object","properties":{"speed":{"type":"number","minimum":0,"maximum":100},"consistency":{"type":"number","minimum":0,"maximum":100},"voiceMatch":{"type":"number","minimum":0,"maximum":100},"expressiveness":{"type":"number","minimum":0,"maximum":100},"clarity":{"type":"number","minimum":0,"maximum":100},"energyMode":{"type":"string","enum":["normal","boost"]}}},"instructions":{"type":"string","maxLength":500},"variables":{"type":"object","properties":{"hours":{"type":"string","maxLength":200},"website":{"type":"string","maxLength":200},"phone":{"type":"string","maxLength":60}}},"templateId":{"anyOf":[{"type":"string","enum":["clinic","bank","restaurant","government","ecommerce","afterHours"]},{"type":"null"}]},"wording":{"type":"string","enum":["gulf","msa"]},"prompts":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","pattern":"^[A-Za-z0-9_-]{1,40}$","description":"Stable id chosen by the client (kept across edits; generations are tracked by it)"},"key":{"type":"string","pattern":"^[A-Za-z0-9][A-Za-z0-9_-]{0,63}$","description":"File name without extension, e.g. welcome, menu_main, opt_1_appointments"},"text":{"type":"string","maxLength":1500,"description":"What is spoken; {company}, {hours}, {website} and {phone} are filled from the pack"},"notes":{"default":"","type":"string","maxLength":500},"parentId":{"default":null,"description":"The menu prompt this one follows (null: a starting prompt)","anyOf":[{"type":"string","pattern":"^[A-Za-z0-9_-]{1,40}$"},{"type":"null"}]},"digit":{"default":null,"description":"Key pressed in the parent menu to reach it; null: plays right after the parent","anyOf":[{"type":"string","enum":["0","1","2","3","4","5","6","7","8","9","*","#"]},{"type":"null"}]},"title":{"description":"Friendly name shown on the call map (not spoken); default: from the key","type":"string","maxLength":80},"action":{"description":"What happens after this message when it has no key options (ignored on a menu)","anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["transfer","voicemail","hangup","back","repeat"],"description":"transfer to a person or number, take a voicemail, hang up, go back to the menu above, repeat the menu"},"target":{"description":"transfer: who or which number/extension, e.g. \"Reception · 100\"","type":"string","maxLength":80}},"required":["type"]},{"type":"null"}]},"noKey":{"description":"A menu: what happens when the caller presses nothing (default repeat once, then goodbye)","anyOf":[{"type":"string","enum":["repeat","goodbye","transfer"]},{"type":"null"}]},"generation":{"anyOf":[{"type":"object","properties":{"generationId":{"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)$"},"status":{"type":"string","enum":["queued","running","succeeded","failed","cancelled"]},"progress":{"type":"number"},"assetUrl":{"type":["string","null"]},"peaks":{"type":"array","items":{"type":"number"}},"duration":{"type":["number","null"]},"creditsCharged":{"type":"number"},"errorCode":{"type":["string","null"]},"changed":{"type":"boolean","description":"Text, voice or settings changed since this audio was made"},"generatedAt":{"type":"string"}},"required":["generationId","status","progress","assetUrl","peaks","duration","creditsCharged","errorCode","changed","generatedAt"]},{"type":"null"}]},"spokenText":{"type":"string","description":"The text with its placeholders filled"},"missing":{"type":"array","items":{"type":"string"},"description":"Placeholders still empty"}},"required":["id","key","text","generation","spokenText","missing"]}},"voice":{"anyOf":[{"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)$"},"name":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"string"}},"imageUrl":{"type":["string","null"]}},"required":["id","name"],"additionalProperties":{}},{"type":"null"}]},"stats":{"type":"object","properties":{"total":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"generated":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"changed":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"pending":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"failed":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"seconds":{"type":"number"}},"required":["total","generated","changed","pending","failed","seconds"]},"locked":{"type":"boolean","description":"The plan no longer includes phone menu packs: viewing and exporting only"}},"required":["id","createdAt","updatedAt","name","companyName","voiceId","productModelId","locale","dialect","params","instructions","variables","templateId","wording","prompts","voice","stats","locked"],"additionalProperties":{}},"example":{"id":"01990000-0000-7000-8000-000000000001","createdAt":"2026-09-19T12:00:00.000Z","updatedAt":"2026-09-19T12:00:00.000Z","name":"Noura","companyName":"example","voiceId":"01990000-0000-7000-8000-000000000001","productModelId":"01990000-0000-7000-8000-000000000001","locale":"ar-SA","dialect":"ar-SA","params":{"speed":0,"consistency":0,"voiceMatch":0,"expressiveness":0,"clarity":0,"energyMode":"normal"},"instructions":"example","variables":{"hours":"example","website":"example","phone":"example"},"templateId":"clinic","wording":"gulf","prompts":[{"id":"example","key":"example","text":"مرحباً بك في فوكلا.","notes":"","parentId":null,"digit":null,"title":"example","action":{"type":"transfer","target":"example"},"noKey":"repeat","generation":{"generationId":"01990000-0000-7000-8000-000000000001","status":"queued","progress":1,"assetUrl":"http://localhost:4000/example","peaks":[1],"duration":"example","creditsCharged":1,"errorCode":"example","changed":true,"generatedAt":"2026-09-19T12:00:00.000Z"},"spokenText":"example","missing":["example"]}],"voice":{"id":"01990000-0000-7000-8000-000000000001","name":{},"imageUrl":"http://localhost:4000/example"},"stats":{"total":-9007199254740991,"generated":-9007199254740991,"changed":-9007199254740991,"pending":-9007199254740991,"failed":-9007199254740991,"seconds":1},"locked":true}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/phone-menus","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/phone-menus","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/phone-menus","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/phone-menus","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/phone-menus","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/phone-menus","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/phone-menus","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/phone-menus","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/phone-menus","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/phone-menus","traceId":"request-id"}}}}}}},"/v1/phone-menus/{id}":{"get":{"operationId":"getPhoneMenu","tags":["Phone menus"],"summary":"One pack: prompts with their placeholders filled, each prompt's latest audio and whether it changed since","description":"Requires workspace role viewer or above. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","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)$"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"},"name":{"type":"string","minLength":1,"maxLength":120},"companyName":{"type":"string","maxLength":120},"voiceId":{"anyOf":[{"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)$"},{"type":"null"}]},"productModelId":{"anyOf":[{"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)$"},{"type":"null"}]},"locale":{"type":"string","maxLength":20},"dialect":{"anyOf":[{"type":"string","maxLength":20},{"type":"null"}]},"params":{"type":"object","properties":{"speed":{"type":"number","minimum":0,"maximum":100},"consistency":{"type":"number","minimum":0,"maximum":100},"voiceMatch":{"type":"number","minimum":0,"maximum":100},"expressiveness":{"type":"number","minimum":0,"maximum":100},"clarity":{"type":"number","minimum":0,"maximum":100},"energyMode":{"type":"string","enum":["normal","boost"]}}},"instructions":{"type":"string","maxLength":500},"variables":{"type":"object","properties":{"hours":{"type":"string","maxLength":200},"website":{"type":"string","maxLength":200},"phone":{"type":"string","maxLength":60}}},"templateId":{"anyOf":[{"type":"string","enum":["clinic","bank","restaurant","government","ecommerce","afterHours"]},{"type":"null"}]},"wording":{"type":"string","enum":["gulf","msa"]},"prompts":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","pattern":"^[A-Za-z0-9_-]{1,40}$","description":"Stable id chosen by the client (kept across edits; generations are tracked by it)"},"key":{"type":"string","pattern":"^[A-Za-z0-9][A-Za-z0-9_-]{0,63}$","description":"File name without extension, e.g. welcome, menu_main, opt_1_appointments"},"text":{"type":"string","maxLength":1500,"description":"What is spoken; {company}, {hours}, {website} and {phone} are filled from the pack"},"notes":{"default":"","type":"string","maxLength":500},"parentId":{"default":null,"description":"The menu prompt this one follows (null: a starting prompt)","anyOf":[{"type":"string","pattern":"^[A-Za-z0-9_-]{1,40}$"},{"type":"null"}]},"digit":{"default":null,"description":"Key pressed in the parent menu to reach it; null: plays right after the parent","anyOf":[{"type":"string","enum":["0","1","2","3","4","5","6","7","8","9","*","#"]},{"type":"null"}]},"title":{"description":"Friendly name shown on the call map (not spoken); default: from the key","type":"string","maxLength":80},"action":{"description":"What happens after this message when it has no key options (ignored on a menu)","anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["transfer","voicemail","hangup","back","repeat"],"description":"transfer to a person or number, take a voicemail, hang up, go back to the menu above, repeat the menu"},"target":{"description":"transfer: who or which number/extension, e.g. \"Reception · 100\"","type":"string","maxLength":80}},"required":["type"]},{"type":"null"}]},"noKey":{"description":"A menu: what happens when the caller presses nothing (default repeat once, then goodbye)","anyOf":[{"type":"string","enum":["repeat","goodbye","transfer"]},{"type":"null"}]},"generation":{"anyOf":[{"type":"object","properties":{"generationId":{"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)$"},"status":{"type":"string","enum":["queued","running","succeeded","failed","cancelled"]},"progress":{"type":"number"},"assetUrl":{"type":["string","null"]},"peaks":{"type":"array","items":{"type":"number"}},"duration":{"type":["number","null"]},"creditsCharged":{"type":"number"},"errorCode":{"type":["string","null"]},"changed":{"type":"boolean","description":"Text, voice or settings changed since this audio was made"},"generatedAt":{"type":"string"}},"required":["generationId","status","progress","assetUrl","peaks","duration","creditsCharged","errorCode","changed","generatedAt"]},{"type":"null"}]},"spokenText":{"type":"string","description":"The text with its placeholders filled"},"missing":{"type":"array","items":{"type":"string"},"description":"Placeholders still empty"}},"required":["id","key","text","generation","spokenText","missing"]}},"voice":{"anyOf":[{"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)$"},"name":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"string"}},"imageUrl":{"type":["string","null"]}},"required":["id","name"],"additionalProperties":{}},{"type":"null"}]},"stats":{"type":"object","properties":{"total":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"generated":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"changed":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"pending":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"failed":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"seconds":{"type":"number"}},"required":["total","generated","changed","pending","failed","seconds"]},"locked":{"type":"boolean","description":"The plan no longer includes phone menu packs: viewing and exporting only"}},"required":["id","createdAt","updatedAt","name","companyName","voiceId","productModelId","locale","dialect","params","instructions","variables","templateId","wording","prompts","voice","stats","locked"],"additionalProperties":{}},"example":{"id":"01990000-0000-7000-8000-000000000001","createdAt":"2026-09-19T12:00:00.000Z","updatedAt":"2026-09-19T12:00:00.000Z","name":"Noura","companyName":"example","voiceId":"01990000-0000-7000-8000-000000000001","productModelId":"01990000-0000-7000-8000-000000000001","locale":"ar-SA","dialect":"ar-SA","params":{"speed":0,"consistency":0,"voiceMatch":0,"expressiveness":0,"clarity":0,"energyMode":"normal"},"instructions":"example","variables":{"hours":"example","website":"example","phone":"example"},"templateId":"clinic","wording":"gulf","prompts":[{"id":"example","key":"example","text":"مرحباً بك في فوكلا.","notes":"","parentId":null,"digit":null,"title":"example","action":{"type":"transfer","target":"example"},"noKey":"repeat","generation":{"generationId":"01990000-0000-7000-8000-000000000001","status":"queued","progress":1,"assetUrl":"http://localhost:4000/example","peaks":[1],"duration":"example","creditsCharged":1,"errorCode":"example","changed":true,"generatedAt":"2026-09-19T12:00:00.000Z"},"spokenText":"example","missing":["example"]}],"voice":{"id":"01990000-0000-7000-8000-000000000001","name":{},"imageUrl":"http://localhost:4000/example"},"stats":{"total":-9007199254740991,"generated":-9007199254740991,"changed":-9007199254740991,"pending":-9007199254740991,"failed":-9007199254740991,"seconds":1},"locked":true}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/phone-menus/{id}","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/phone-menus/{id}","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/phone-menus/{id}","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/phone-menus/{id}","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/phone-menus/{id}","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/phone-menus/{id}","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/phone-menus/{id}","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/phone-menus/{id}","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/phone-menus/{id}","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/phone-menus/{id}","traceId":"request-id"}}}}}},"patch":{"operationId":"updatePhoneMenu","tags":["Phone menus"],"summary":"Change settings or the prompt list (sent whole, in order); generated audio stays attached to its prompt id","description":"Requires workspace role editor or above. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"X-CSRF-Token","in":"header","required":false,"description":"Required for cookie-authenticated mutations; returned by sign-in/sign-up.","schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":120},"companyName":{"type":"string","maxLength":120},"voiceId":{"anyOf":[{"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)$"},{"type":"null"}]},"productModelId":{"anyOf":[{"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)$"},{"type":"null"}]},"locale":{"type":"string","maxLength":20},"dialect":{"anyOf":[{"type":"string","maxLength":20},{"type":"null"}]},"params":{"type":"object","properties":{"speed":{"type":"number","minimum":0,"maximum":100},"consistency":{"type":"number","minimum":0,"maximum":100},"voiceMatch":{"type":"number","minimum":0,"maximum":100},"expressiveness":{"type":"number","minimum":0,"maximum":100},"clarity":{"type":"number","minimum":0,"maximum":100},"energyMode":{"type":"string","enum":["normal","boost"]}}},"instructions":{"type":"string","maxLength":500},"variables":{"type":"object","properties":{"hours":{"type":"string","maxLength":200},"website":{"type":"string","maxLength":200},"phone":{"type":"string","maxLength":60}}},"templateId":{"anyOf":[{"type":"string","enum":["clinic","bank","restaurant","government","ecommerce","afterHours"]},{"type":"null"}]},"wording":{"type":"string","enum":["gulf","msa"]},"prompts":{"maxItems":200,"type":"array","items":{"type":"object","properties":{"id":{"type":"string","pattern":"^[A-Za-z0-9_-]{1,40}$","description":"Stable id chosen by the client (kept across edits; generations are tracked by it)"},"key":{"type":"string","pattern":"^[A-Za-z0-9][A-Za-z0-9_-]{0,63}$","description":"File name without extension, e.g. welcome, menu_main, opt_1_appointments"},"text":{"type":"string","maxLength":1500,"description":"What is spoken; {company}, {hours}, {website} and {phone} are filled from the pack"},"notes":{"default":"","type":"string","maxLength":500},"parentId":{"default":null,"description":"The menu prompt this one follows (null: a starting prompt)","anyOf":[{"type":"string","pattern":"^[A-Za-z0-9_-]{1,40}$"},{"type":"null"}]},"digit":{"default":null,"description":"Key pressed in the parent menu to reach it; null: plays right after the parent","anyOf":[{"type":"string","enum":["0","1","2","3","4","5","6","7","8","9","*","#"]},{"type":"null"}]},"title":{"description":"Friendly name shown on the call map (not spoken); default: from the key","type":"string","maxLength":80},"action":{"description":"What happens after this message when it has no key options (ignored on a menu)","anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["transfer","voicemail","hangup","back","repeat"],"description":"transfer to a person or number, take a voicemail, hang up, go back to the menu above, repeat the menu"},"target":{"description":"transfer: who or which number/extension, e.g. \"Reception · 100\"","type":"string","maxLength":80}},"required":["type"]},{"type":"null"}]},"noKey":{"description":"A menu: what happens when the caller presses nothing (default repeat once, then goodbye)","anyOf":[{"type":"string","enum":["repeat","goodbye","transfer"]},{"type":"null"}]}},"required":["id","key","text"]}}}},"example":{"name":"Noura","companyName":"example","voiceId":"01990000-0000-7000-8000-000000000001","productModelId":"01990000-0000-7000-8000-000000000001","locale":"ar-SA","dialect":"ar-SA","params":{"speed":0,"consistency":0,"voiceMatch":0,"expressiveness":0,"clarity":0,"energyMode":"normal"},"instructions":"example","variables":{"hours":"example","website":"example","phone":"example"},"templateId":"clinic","wording":"gulf","prompts":[{"id":"example","key":"example","text":"مرحباً بك في فوكلا.","notes":"","parentId":null,"digit":null,"title":"example","action":{"type":"transfer","target":"example"},"noKey":"repeat"}]}}}},"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","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)$"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"},"name":{"type":"string","minLength":1,"maxLength":120},"companyName":{"type":"string","maxLength":120},"voiceId":{"anyOf":[{"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)$"},{"type":"null"}]},"productModelId":{"anyOf":[{"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)$"},{"type":"null"}]},"locale":{"type":"string","maxLength":20},"dialect":{"anyOf":[{"type":"string","maxLength":20},{"type":"null"}]},"params":{"type":"object","properties":{"speed":{"type":"number","minimum":0,"maximum":100},"consistency":{"type":"number","minimum":0,"maximum":100},"voiceMatch":{"type":"number","minimum":0,"maximum":100},"expressiveness":{"type":"number","minimum":0,"maximum":100},"clarity":{"type":"number","minimum":0,"maximum":100},"energyMode":{"type":"string","enum":["normal","boost"]}}},"instructions":{"type":"string","maxLength":500},"variables":{"type":"object","properties":{"hours":{"type":"string","maxLength":200},"website":{"type":"string","maxLength":200},"phone":{"type":"string","maxLength":60}}},"templateId":{"anyOf":[{"type":"string","enum":["clinic","bank","restaurant","government","ecommerce","afterHours"]},{"type":"null"}]},"wording":{"type":"string","enum":["gulf","msa"]},"prompts":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","pattern":"^[A-Za-z0-9_-]{1,40}$","description":"Stable id chosen by the client (kept across edits; generations are tracked by it)"},"key":{"type":"string","pattern":"^[A-Za-z0-9][A-Za-z0-9_-]{0,63}$","description":"File name without extension, e.g. welcome, menu_main, opt_1_appointments"},"text":{"type":"string","maxLength":1500,"description":"What is spoken; {company}, {hours}, {website} and {phone} are filled from the pack"},"notes":{"default":"","type":"string","maxLength":500},"parentId":{"default":null,"description":"The menu prompt this one follows (null: a starting prompt)","anyOf":[{"type":"string","pattern":"^[A-Za-z0-9_-]{1,40}$"},{"type":"null"}]},"digit":{"default":null,"description":"Key pressed in the parent menu to reach it; null: plays right after the parent","anyOf":[{"type":"string","enum":["0","1","2","3","4","5","6","7","8","9","*","#"]},{"type":"null"}]},"title":{"description":"Friendly name shown on the call map (not spoken); default: from the key","type":"string","maxLength":80},"action":{"description":"What happens after this message when it has no key options (ignored on a menu)","anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["transfer","voicemail","hangup","back","repeat"],"description":"transfer to a person or number, take a voicemail, hang up, go back to the menu above, repeat the menu"},"target":{"description":"transfer: who or which number/extension, e.g. \"Reception · 100\"","type":"string","maxLength":80}},"required":["type"]},{"type":"null"}]},"noKey":{"description":"A menu: what happens when the caller presses nothing (default repeat once, then goodbye)","anyOf":[{"type":"string","enum":["repeat","goodbye","transfer"]},{"type":"null"}]},"generation":{"anyOf":[{"type":"object","properties":{"generationId":{"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)$"},"status":{"type":"string","enum":["queued","running","succeeded","failed","cancelled"]},"progress":{"type":"number"},"assetUrl":{"type":["string","null"]},"peaks":{"type":"array","items":{"type":"number"}},"duration":{"type":["number","null"]},"creditsCharged":{"type":"number"},"errorCode":{"type":["string","null"]},"changed":{"type":"boolean","description":"Text, voice or settings changed since this audio was made"},"generatedAt":{"type":"string"}},"required":["generationId","status","progress","assetUrl","peaks","duration","creditsCharged","errorCode","changed","generatedAt"]},{"type":"null"}]},"spokenText":{"type":"string","description":"The text with its placeholders filled"},"missing":{"type":"array","items":{"type":"string"},"description":"Placeholders still empty"}},"required":["id","key","text","generation","spokenText","missing"]}},"voice":{"anyOf":[{"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)$"},"name":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"string"}},"imageUrl":{"type":["string","null"]}},"required":["id","name"],"additionalProperties":{}},{"type":"null"}]},"stats":{"type":"object","properties":{"total":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"generated":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"changed":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"pending":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"failed":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"seconds":{"type":"number"}},"required":["total","generated","changed","pending","failed","seconds"]},"locked":{"type":"boolean","description":"The plan no longer includes phone menu packs: viewing and exporting only"}},"required":["id","createdAt","updatedAt","name","companyName","voiceId","productModelId","locale","dialect","params","instructions","variables","templateId","wording","prompts","voice","stats","locked"],"additionalProperties":{}},"example":{"id":"01990000-0000-7000-8000-000000000001","createdAt":"2026-09-19T12:00:00.000Z","updatedAt":"2026-09-19T12:00:00.000Z","name":"Noura","companyName":"example","voiceId":"01990000-0000-7000-8000-000000000001","productModelId":"01990000-0000-7000-8000-000000000001","locale":"ar-SA","dialect":"ar-SA","params":{"speed":0,"consistency":0,"voiceMatch":0,"expressiveness":0,"clarity":0,"energyMode":"normal"},"instructions":"example","variables":{"hours":"example","website":"example","phone":"example"},"templateId":"clinic","wording":"gulf","prompts":[{"id":"example","key":"example","text":"مرحباً بك في فوكلا.","notes":"","parentId":null,"digit":null,"title":"example","action":{"type":"transfer","target":"example"},"noKey":"repeat","generation":{"generationId":"01990000-0000-7000-8000-000000000001","status":"queued","progress":1,"assetUrl":"http://localhost:4000/example","peaks":[1],"duration":"example","creditsCharged":1,"errorCode":"example","changed":true,"generatedAt":"2026-09-19T12:00:00.000Z"},"spokenText":"example","missing":["example"]}],"voice":{"id":"01990000-0000-7000-8000-000000000001","name":{},"imageUrl":"http://localhost:4000/example"},"stats":{"total":-9007199254740991,"generated":-9007199254740991,"changed":-9007199254740991,"pending":-9007199254740991,"failed":-9007199254740991,"seconds":1},"locked":true}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/phone-menus/{id}","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/phone-menus/{id}","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/phone-menus/{id}","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/phone-menus/{id}","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/phone-menus/{id}","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/phone-menus/{id}","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/phone-menus/{id}","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/phone-menus/{id}","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/phone-menus/{id}","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/phone-menus/{id}","traceId":"request-id"}}}}}},"delete":{"operationId":"deletePhoneMenu","tags":["Phone menus"],"summary":"delete Phone Menu","description":"Requires workspace role editor or above. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"X-CSRF-Token","in":"header","required":false,"description":"Required for cookie-authenticated mutations; returned by sign-in/sign-up.","schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"ok":{"type":"boolean"}},"required":["ok"]},"example":{"ok":true}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/phone-menus/{id}","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/phone-menus/{id}","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/phone-menus/{id}","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/phone-menus/{id}","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/phone-menus/{id}","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/phone-menus/{id}","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/phone-menus/{id}","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/phone-menus/{id}","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/phone-menus/{id}","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/phone-menus/{id}","traceId":"request-id"}}}}}}},"/v1/phone-menus/{id}/quote":{"post":{"operationId":"quotePhoneMenu","tags":["Phone menus"],"summary":"Credits to generate these prompts: the text-to-speech quote (as POST /v1/generations/quote) of each prompt, summed","description":"Requires workspace role viewer or above. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"X-CSRF-Token","in":"header","required":false,"description":"Required for cookie-authenticated mutations; returned by sign-in/sign-up.","schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"promptIds":{"description":"Default: every prompt","maxItems":200,"type":"array","items":{"type":"string","pattern":"^[A-Za-z0-9_-]{1,40}$"}}}},"example":{"promptIds":["example"]}}}},"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"credits":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"billableCharacters":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"prompts":{"type":"array","items":{"type":"object","properties":{"promptId":{"type":"string"},"credits":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"billableCharacters":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}},"required":["promptId","credits","billableCharacters"]}},"skipped":{"type":"array","items":{"type":"object","properties":{"promptId":{"type":"string"},"code":{"type":"string"}},"required":["promptId","code"]}}},"required":["credits","billableCharacters","prompts","skipped"]},"example":{"credits":-9007199254740991,"billableCharacters":-9007199254740991,"prompts":[{"promptId":"example","credits":-9007199254740991,"billableCharacters":-9007199254740991}],"skipped":[{"promptId":"example","code":"example"}]}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/phone-menus/{id}/quote","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/phone-menus/{id}/quote","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/phone-menus/{id}/quote","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/phone-menus/{id}/quote","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/phone-menus/{id}/quote","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/phone-menus/{id}/quote","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/phone-menus/{id}/quote","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/phone-menus/{id}/quote","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/phone-menus/{id}/quote","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/phone-menus/{id}/quote","traceId":"request-id"}}}}}}},"/v1/phone-menus/{id}/generate":{"post":{"operationId":"generatePhoneMenu","tags":["Phone menus"],"summary":"Generate or regenerate prompts: one text-to-speech generation per prompt, charged as normal TTS. Stops at the first credit refusal (402 when none started)","description":"Requires workspace role editor or above. Retry with the same Idempotency-Key and identical body. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"Idempotency-Key","in":"header","required":true,"schema":{"type":"string","maxLength":200},"example":"request-2026-001"},{"name":"X-CSRF-Token","in":"header","required":false,"description":"Required for cookie-authenticated mutations; returned by sign-in/sign-up.","schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"promptIds":{"minItems":1,"maxItems":200,"type":"array","items":{"type":"string","pattern":"^[A-Za-z0-9_-]{1,40}$"},"description":"Prompts to (re)generate, in order"}},"required":["promptIds"]},"example":{"promptIds":["example"]}}}},"responses":{"202":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"started":{"type":"array","items":{"type":"object","properties":{"promptId":{"type":"string"},"generationId":{"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)$"}},"required":["promptId","generationId"]}},"failed":{"type":"array","items":{"type":"object","properties":{"promptId":{"type":"string"},"code":{"type":"string"},"message":{"type":"string"}},"required":["promptId","code","message"]}},"pack":{"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)$"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"},"name":{"type":"string","minLength":1,"maxLength":120},"companyName":{"type":"string","maxLength":120},"voiceId":{"anyOf":[{"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)$"},{"type":"null"}]},"productModelId":{"anyOf":[{"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)$"},{"type":"null"}]},"locale":{"type":"string","maxLength":20},"dialect":{"anyOf":[{"type":"string","maxLength":20},{"type":"null"}]},"params":{"type":"object","properties":{"speed":{"type":"number","minimum":0,"maximum":100},"consistency":{"type":"number","minimum":0,"maximum":100},"voiceMatch":{"type":"number","minimum":0,"maximum":100},"expressiveness":{"type":"number","minimum":0,"maximum":100},"clarity":{"type":"number","minimum":0,"maximum":100},"energyMode":{"type":"string","enum":["normal","boost"]}}},"instructions":{"type":"string","maxLength":500},"variables":{"type":"object","properties":{"hours":{"type":"string","maxLength":200},"website":{"type":"string","maxLength":200},"phone":{"type":"string","maxLength":60}}},"templateId":{"anyOf":[{"type":"string","enum":["clinic","bank","restaurant","government","ecommerce","afterHours"]},{"type":"null"}]},"wording":{"type":"string","enum":["gulf","msa"]},"prompts":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","pattern":"^[A-Za-z0-9_-]{1,40}$","description":"Stable id chosen by the client (kept across edits; generations are tracked by it)"},"key":{"type":"string","pattern":"^[A-Za-z0-9][A-Za-z0-9_-]{0,63}$","description":"File name without extension, e.g. welcome, menu_main, opt_1_appointments"},"text":{"type":"string","maxLength":1500,"description":"What is spoken; {company}, {hours}, {website} and {phone} are filled from the pack"},"notes":{"default":"","type":"string","maxLength":500},"parentId":{"default":null,"description":"The menu prompt this one follows (null: a starting prompt)","anyOf":[{"type":"string","pattern":"^[A-Za-z0-9_-]{1,40}$"},{"type":"null"}]},"digit":{"default":null,"description":"Key pressed in the parent menu to reach it; null: plays right after the parent","anyOf":[{"type":"string","enum":["0","1","2","3","4","5","6","7","8","9","*","#"]},{"type":"null"}]},"title":{"description":"Friendly name shown on the call map (not spoken); default: from the key","type":"string","maxLength":80},"action":{"description":"What happens after this message when it has no key options (ignored on a menu)","anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["transfer","voicemail","hangup","back","repeat"],"description":"transfer to a person or number, take a voicemail, hang up, go back to the menu above, repeat the menu"},"target":{"description":"transfer: who or which number/extension, e.g. \"Reception · 100\"","type":"string","maxLength":80}},"required":["type"]},{"type":"null"}]},"noKey":{"description":"A menu: what happens when the caller presses nothing (default repeat once, then goodbye)","anyOf":[{"type":"string","enum":["repeat","goodbye","transfer"]},{"type":"null"}]},"generation":{"anyOf":[{"type":"object","properties":{"generationId":{"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)$"},"status":{"type":"string","enum":["queued","running","succeeded","failed","cancelled"]},"progress":{"type":"number"},"assetUrl":{"type":["string","null"]},"peaks":{"type":"array","items":{"type":"number"}},"duration":{"type":["number","null"]},"creditsCharged":{"type":"number"},"errorCode":{"type":["string","null"]},"changed":{"type":"boolean","description":"Text, voice or settings changed since this audio was made"},"generatedAt":{"type":"string"}},"required":["generationId","status","progress","assetUrl","peaks","duration","creditsCharged","errorCode","changed","generatedAt"]},{"type":"null"}]},"spokenText":{"type":"string","description":"The text with its placeholders filled"},"missing":{"type":"array","items":{"type":"string"},"description":"Placeholders still empty"}},"required":["id","key","text","generation","spokenText","missing"]}},"voice":{"anyOf":[{"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)$"},"name":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"string"}},"imageUrl":{"type":["string","null"]}},"required":["id","name"],"additionalProperties":{}},{"type":"null"}]},"stats":{"type":"object","properties":{"total":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"generated":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"changed":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"pending":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"failed":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"seconds":{"type":"number"}},"required":["total","generated","changed","pending","failed","seconds"]},"locked":{"type":"boolean","description":"The plan no longer includes phone menu packs: viewing and exporting only"}},"required":["id","createdAt","updatedAt","name","companyName","voiceId","productModelId","locale","dialect","params","instructions","variables","templateId","wording","prompts","voice","stats","locked"],"additionalProperties":{}}},"required":["started","failed","pack"]},"example":{"started":[{"promptId":"example","generationId":"01990000-0000-7000-8000-000000000001"}],"failed":[{"promptId":"example","code":"example","message":"example"}],"pack":{"id":"01990000-0000-7000-8000-000000000001","createdAt":"2026-09-19T12:00:00.000Z","updatedAt":"2026-09-19T12:00:00.000Z","name":"Noura","companyName":"example","voiceId":"01990000-0000-7000-8000-000000000001","productModelId":"01990000-0000-7000-8000-000000000001","locale":"ar-SA","dialect":"ar-SA","params":{"speed":0,"consistency":0,"voiceMatch":0,"expressiveness":0,"clarity":0,"energyMode":"normal"},"instructions":"example","variables":{"hours":"example","website":"example","phone":"example"},"templateId":"clinic","wording":"gulf","prompts":[{"id":"example","key":"example","text":"مرحباً بك في فوكلا.","notes":"","parentId":null,"digit":null,"title":"example","action":{"type":"transfer","target":"example"},"noKey":"repeat","generation":{"generationId":"01990000-0000-7000-8000-000000000001","status":"queued","progress":1,"assetUrl":"http://localhost:4000/example","peaks":[1],"duration":"example","creditsCharged":1,"errorCode":"example","changed":true,"generatedAt":"2026-09-19T12:00:00.000Z"},"spokenText":"example","missing":["example"]}],"voice":{"id":"01990000-0000-7000-8000-000000000001","name":{},"imageUrl":"http://localhost:4000/example"},"stats":{"total":-9007199254740991,"generated":-9007199254740991,"changed":-9007199254740991,"pending":-9007199254740991,"failed":-9007199254740991,"seconds":1},"locked":true}}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/phone-menus/{id}/generate","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/phone-menus/{id}/generate","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/phone-menus/{id}/generate","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/phone-menus/{id}/generate","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/phone-menus/{id}/generate","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/phone-menus/{id}/generate","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/phone-menus/{id}/generate","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/phone-menus/{id}/generate","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/phone-menus/{id}/generate","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/phone-menus/{id}/generate","traceId":"request-id"}}}}}}},"/v1/phone-menus/{id}/exports":{"post":{"operationId":"exportPhoneMenu","tags":["Phone menus"],"summary":"Build a ZIP of the generated prompts in phone formats (G.711 μ-law/A-law, PCM 8/16 kHz, MP3, GSM) with manifest.csv; the media worker makes it. Waits for approvals like downloads","description":"Requires workspace role viewer or above. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"X-CSRF-Token","in":"header","required":false,"description":"Required for cookie-authenticated mutations; returned by sign-in/sign-up.","schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"formats":{"minItems":1,"maxItems":6,"type":"array","items":{"type":"string","enum":["ulaw","alaw","pcm8k","pcm16k","mp3","gsm"]}},"leadingSilenceMs":{"default":250,"type":"integer","minimum":0,"maximum":5000},"trailingSilenceMs":{"default":500,"type":"integer","minimum":0,"maximum":5000},"trimSilence":{"default":true,"description":"Cut the silence the voice left at both ends before adding the chosen silence","type":"boolean"},"normalize":{"default":true,"type":"boolean"},"loudness":{"default":-18,"description":"Target integrated loudness (LUFS) when normalize is on","type":"integer","minimum":-30,"maximum":-10},"naming":{"default":"{key}","description":"File name pattern: {key}, {n} (01, 02…), {company}","type":"string","minLength":1,"maxLength":80},"promptIds":{"description":"Default: every generated prompt","maxItems":200,"type":"array","items":{"type":"string","pattern":"^[A-Za-z0-9_-]{1,40}$"}}},"required":["formats"]},"example":{"formats":["ulaw"],"leadingSilenceMs":250,"trailingSilenceMs":500,"trimSilence":true,"normalize":true,"loudness":-18,"naming":"{key}","promptIds":["example"]}}}},"responses":{"202":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","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)$"},"packId":{"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)$"},"status":{"type":"string","enum":["queued","processing","ready","failed"]},"progress":{"type":"number"},"options":{"type":"object","properties":{"formats":{"minItems":1,"maxItems":6,"type":"array","items":{"type":"string","enum":["ulaw","alaw","pcm8k","pcm16k","mp3","gsm"]}},"leadingSilenceMs":{"default":250,"type":"integer","minimum":0,"maximum":5000},"trailingSilenceMs":{"default":500,"type":"integer","minimum":0,"maximum":5000},"trimSilence":{"default":true,"description":"Cut the silence the voice left at both ends before adding the chosen silence","type":"boolean"},"normalize":{"default":true,"type":"boolean"},"loudness":{"default":-18,"description":"Target integrated loudness (LUFS) when normalize is on","type":"integer","minimum":-30,"maximum":-10},"naming":{"default":"{key}","description":"File name pattern: {key}, {n} (01, 02…), {company}","type":"string","minLength":1,"maxLength":80},"promptIds":{"description":"Default: every generated prompt","maxItems":200,"type":"array","items":{"type":"string","pattern":"^[A-Za-z0-9_-]{1,40}$"}}},"required":["formats"]},"files":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"size":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"downloadUrl":{"type":["string","null"]},"fileName":{"type":"string"},"error":{"type":["string","null"]},"skipped":{"type":"array","items":{"type":"string"},"description":"Prompt keys left out (not generated yet)"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"}},"required":["id","packId","status","progress","options","files","size","downloadUrl","fileName","error","skipped","createdAt","updatedAt"]},"example":{"id":"01990000-0000-7000-8000-000000000001","packId":"01990000-0000-7000-8000-000000000001","status":"queued","progress":1,"options":{"formats":["ulaw"],"leadingSilenceMs":250,"trailingSilenceMs":500,"trimSilence":true,"normalize":true,"loudness":-18,"naming":"{key}","promptIds":["example"]},"files":-9007199254740991,"size":-9007199254740991,"downloadUrl":"http://localhost:4000/example","fileName":"example","error":"example","skipped":["example"],"createdAt":"2026-09-19T12:00:00.000Z","updatedAt":"2026-09-19T12:00:00.000Z"}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/phone-menus/{id}/exports","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/phone-menus/{id}/exports","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/phone-menus/{id}/exports","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/phone-menus/{id}/exports","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/phone-menus/{id}/exports","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/phone-menus/{id}/exports","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/phone-menus/{id}/exports","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/phone-menus/{id}/exports","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/phone-menus/{id}/exports","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/phone-menus/{id}/exports","traceId":"request-id"}}}}}}},"/v1/phone-menus/{id}/exports/{exportId}":{"get":{"operationId":"getPhoneMenuExport","tags":["Phone menus"],"summary":"An export: status, progress and, once ready, a signed ZIP download link","description":"Requires workspace role viewer or above. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"exportId","in":"path","required":true,"schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","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)$"},"packId":{"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)$"},"status":{"type":"string","enum":["queued","processing","ready","failed"]},"progress":{"type":"number"},"options":{"type":"object","properties":{"formats":{"minItems":1,"maxItems":6,"type":"array","items":{"type":"string","enum":["ulaw","alaw","pcm8k","pcm16k","mp3","gsm"]}},"leadingSilenceMs":{"default":250,"type":"integer","minimum":0,"maximum":5000},"trailingSilenceMs":{"default":500,"type":"integer","minimum":0,"maximum":5000},"trimSilence":{"default":true,"description":"Cut the silence the voice left at both ends before adding the chosen silence","type":"boolean"},"normalize":{"default":true,"type":"boolean"},"loudness":{"default":-18,"description":"Target integrated loudness (LUFS) when normalize is on","type":"integer","minimum":-30,"maximum":-10},"naming":{"default":"{key}","description":"File name pattern: {key}, {n} (01, 02…), {company}","type":"string","minLength":1,"maxLength":80},"promptIds":{"description":"Default: every generated prompt","maxItems":200,"type":"array","items":{"type":"string","pattern":"^[A-Za-z0-9_-]{1,40}$"}}},"required":["formats"]},"files":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"size":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"downloadUrl":{"type":["string","null"]},"fileName":{"type":"string"},"error":{"type":["string","null"]},"skipped":{"type":"array","items":{"type":"string"},"description":"Prompt keys left out (not generated yet)"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"}},"required":["id","packId","status","progress","options","files","size","downloadUrl","fileName","error","skipped","createdAt","updatedAt"]},"example":{"id":"01990000-0000-7000-8000-000000000001","packId":"01990000-0000-7000-8000-000000000001","status":"queued","progress":1,"options":{"formats":["ulaw"],"leadingSilenceMs":250,"trailingSilenceMs":500,"trimSilence":true,"normalize":true,"loudness":-18,"naming":"{key}","promptIds":["example"]},"files":-9007199254740991,"size":-9007199254740991,"downloadUrl":"http://localhost:4000/example","fileName":"example","error":"example","skipped":["example"],"createdAt":"2026-09-19T12:00:00.000Z","updatedAt":"2026-09-19T12:00:00.000Z"}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/phone-menus/{id}/exports/{exportId}","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/phone-menus/{id}/exports/{exportId}","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/phone-menus/{id}/exports/{exportId}","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/phone-menus/{id}/exports/{exportId}","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/phone-menus/{id}/exports/{exportId}","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/phone-menus/{id}/exports/{exportId}","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/phone-menus/{id}/exports/{exportId}","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/phone-menus/{id}/exports/{exportId}","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/phone-menus/{id}/exports/{exportId}","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/phone-menus/{id}/exports/{exportId}","traceId":"request-id"}}}}}}},"/v1/birthday-hero":{"post":{"operationId":"createBirthdayHero","tags":["Cartoon"],"summary":"Start a Birthday Hero video: the child becomes a cartoon hero (from the photos), the story is written, cast and storyboarded (free preview, status storyboarded); then POST /v1/cartoon/projects/{id}/produce. Available on every plan; paid with credits","description":"Requires workspace role editor or above. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"X-CSRF-Token","in":"header","required":false,"description":"Required for cookie-authenticated mutations; returned by sign-in/sign-up.","schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"adventure":{"type":"string","minLength":1,"maxLength":80,"description":"Slug of a birthday adventure (GET /v1/birthday-hero/adventures)"},"childName":{"type":"string","minLength":1,"maxLength":30,"description":"The name the story and the closing card use"},"age":{"type":"integer","minimum":1,"maximum":17,"description":"The age the child turns"},"gender":{"type":"string","enum":["boy","girl"]},"photoUploadIds":{"minItems":1,"maxItems":3,"type":"array","items":{"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":"Validated image uploads (POST /v1/uploads) of the child, face clearly visible"},"details":{"default":"","description":"What the child loves (a favourite food, game, toy, sibling names) to weave into the story","type":"string","maxLength":300},"message":{"default":"","description":"A wish from the family shown on the closing card","type":"string","maxLength":120},"lengthSeconds":{"default":45,"description":"The adventure; the 10-second birthday intro and the closing card come on top","anyOf":[{"type":"number","const":30},{"type":"number","const":45},{"type":"number","const":60},{"type":"number","const":120},{"type":"number","const":180}]},"dialect":{"default":"ar-SA","type":"string","minLength":2,"maxLength":20},"aspectRatio":{"default":"9:16","type":"string","enum":["9:16","16:9"]},"consent":{"type":"object","properties":{"guardian":{"type":"boolean","const":true,"description":"The person is the child’s parent or guardian, or has their permission, to use these photos"}},"required":["guardian"]}},"required":["adventure","childName","age","gender","photoUploadIds","consent"]},"example":{"adventure":"example","childName":"example","age":1,"gender":"boy","photoUploadIds":["01990000-0000-7000-8000-000000000001"],"details":"","message":"","lengthSeconds":45,"dialect":"ar-SA","aspectRatio":"9:16","consent":{"guardian":true}}}}},"responses":{"201":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","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)$"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"},"title":{"type":"string"},"logline":{"type":"string"},"idea":{"type":"string"},"status":{"type":"string","enum":["writing","scripted","casting","cast","storyboarding","storyboarded","producing","mixing","ready","failed"],"description":"scripted, cast and storyboarded wait for the person (director mode); one-click mode walks through them"},"stage":{"anyOf":[{"type":"string","enum":["write","sheets","storyboard","voice","render","poll","sound","mix"]},{"type":"null"}]},"progress":{"type":"number"},"error":{"description":"WRITE_FAILED, SHEETS_FAILED, STORYBOARD_FAILED, VOICE_FAILED, TOO_LONG, SCENE_FAILED, RENDER_FAILED, REMIX_FAILED; on a storyboard one-click could not produce: the refusal code (FORBIDDEN, INSUFFICIENT_CREDITS…) with errorPath","type":["string","null"]},"failedStage":{"anyOf":[{"type":"string","enum":["write","sheets","storyboard","voice","render","poll","sound","mix"]},{"type":"null"}]},"errorPath":{"description":"The plan limit that stopped one-click production (an entitlement key), for the upgrade prompt","type":["string","null"]},"departments":{"type":"object","properties":{"dialogue":{"type":"number"},"animation":{"type":"number"},"sound":{"type":"number"},"music":{"type":"number"},"mix":{"type":"number"}},"required":["dialogue","animation","sound","music","mix"],"description":"Progress 0..100 of each department while producing (the production floor)"},"mode":{"type":"string","enum":["auto","director"]},"theme":{"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)$"},"slug":{"type":"string"},"kind":{"type":"string","enum":["series","style"]},"planet":{"anyOf":[{"type":"string","enum":["action","adventure","sports","comedy","zumurruda","science","bonbon","heroes"]},{"type":"null"}]},"name":{"type":"object","properties":{"ar":{"type":"string","minLength":1},"en":{"type":"string","minLength":1}},"required":["ar","en"]},"tagline":{"type":"object","properties":{"ar":{"type":"string","minLength":1},"en":{"type":"string","minLength":1}},"required":["ar","en"]},"colors":{"type":"object","properties":{"from":{"type":"string","pattern":"^#[0-9a-fA-F]{6}$"},"to":{"type":"string","pattern":"^#[0-9a-fA-F]{6}$"},"accent":{"type":"string","pattern":"^#[0-9a-fA-F]{6}$"}},"required":["from","to","accent"]},"emoji":{"type":"string"},"jingle":{"type":"string","enum":["mystery","heroic","sports","mecha","tearjerker","pirate","power","creature","slapstick","anime","retro","family","kawaii","storybook","kids","adventure"]},"coverUrl":{"type":["string","null"]},"sampleUrl":{"type":["string","null"]},"loopUrl":{"type":["string","null"]},"dialect":{"type":"string"},"narrator":{"type":"boolean"},"ideas":{"type":"array","items":{"type":"object","properties":{"ar":{"type":"string","minLength":1},"en":{"type":"string","minLength":1}},"required":["ar","en"]}},"cast":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":40,"pattern":"^[a-z0-9-]+$"},"name":{"type":"object","properties":{"ar":{"type":"string","minLength":1},"en":{"type":"string","minLength":1}},"required":["ar","en"]},"appearance":{"type":"string","minLength":1,"maxLength":600,"description":"English description the image model draws (hair, outfit, colours, build)"},"personality":{"default":"","type":"string","maxLength":300},"gender":{"type":"string","enum":["male","female"]},"age":{"type":"string","enum":["child","teen","adult","elder"]},"voiceId":{"default":null,"description":"Default voice (Cartoon category)","anyOf":[{"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)$"},{"type":"null"}]},"voiceFx":{"default":"none","type":"string","enum":["none","chibi","giant","robot","alien","radio","echo","monster"]},"imageUrl":{"type":["string","null"]}},"required":["id","name","appearance","gender","age","imageUrl"]}},"locked":{"type":"boolean","description":"The plan does not include this theme (series need cartoonSeries)"},"order":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}},"required":["id","slug","kind","planet","name","tagline","colors","emoji","jingle","coverUrl","sampleUrl","loopUrl","dialect","narrator","ideas","cast","locked","order"]},"lengthSeconds":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"dialect":{"type":"string"},"aspectRatio":{"type":"string","enum":["9:16","16:9","1:1"]},"tier":{"type":"string"},"captions":{"type":"boolean"},"opening":{"type":"boolean"},"characters":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"role":{"type":"string"},"appearance":{"type":"string"},"personality":{"type":"string"},"gender":{"type":"string","enum":["male","female"]},"age":{"type":"string","enum":["child","teen","adult","elder"]},"voiceId":{"anyOf":[{"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)$"},{"type":"null"}]},"voiceFx":{"type":"string","enum":["none","chibi","giant","robot","alien","radio","echo","monster"]},"castId":{"type":["string","null"]},"sheetUrl":{"type":["string","null"]},"sheetStatus":{"type":"string","enum":["none","pending","ready","failed"]}},"required":["id","name","role","appearance","personality","gender","age","voiceId","voiceFx","castId","sheetUrl","sheetStatus"]}},"locations":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"ambience":{"type":"string"}},"required":["id","name","description","ambience"]}},"shots":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"locationId":{"type":["string","null"]},"camera":{"type":"string"},"action":{"type":"string","description":"English visual prompt"},"summary":{"description":"What the shot shows, one line in the episode language (the screenplay page shows it)","type":["string","null"]},"characters":{"type":"array","items":{"type":"string"}},"lines":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"speaker":{"type":"string","description":"A character id, or narrator"},"text":{"type":"string"},"emotion":{"type":"string"},"start":{"type":["number","null"]},"end":{"type":["number","null"]},"audioUrl":{"type":["string","null"]}},"required":["id","speaker","text","emotion","start","end","audioUrl"]}},"sfx":{"type":"array","items":{"type":"object","properties":{"what":{"type":"string"},"label":{"description":"Its name in the episode language","type":"string"},"tags":{"type":"array","items":{"type":"string"}},"at":{"type":"number"},"intensity":{"type":"string","enum":["soft","normal","big"]}},"required":["what","tags","at","intensity"]}},"music":{"type":"string","enum":["none","stinger","swell","tension","victory","sad","comic"]},"start":{"type":["number","null"]},"end":{"type":["number","null"]},"status":{"type":"string","enum":["pending","queued","rendering","ready","failed"]},"frameUrl":{"type":["string","null"]},"clipUrl":{"type":["string","null"]},"error":{"type":["string","null"]},"parentId":{"description":"Set on a shot split from a long one (it shares the parent still)","type":["string","null"]}},"required":["id","locationId","camera","action","summary","characters","lines","sfx","music","start","end","status","frameUrl","clipUrl","error","parentId"]}},"song":{"anyOf":[{"type":"object","properties":{"lyrics":{"type":"string"}},"required":["lyrics"]},{"type":"null"}]},"cues":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"lane":{"type":"string","enum":["sfx","foley","ambience","music"]},"label":{"type":"string"},"at":{"type":"number"},"duration":{"type":"number"},"gain":{"type":"number","description":"dB"},"pan":{"type":"number"},"muted":{"type":"boolean"},"source":{"type":"string","enum":["library","generated","synth"]},"soundId":{"anyOf":[{"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)$"},{"type":"null"}]},"url":{"type":["string","null"]},"shotId":{"type":["string","null"]},"generating":{"type":"boolean","description":"A new take is being made (regenerate)"},"alternatives":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"label":{"type":"string"},"source":{"type":"string","enum":["library","generated","synth"]},"url":{"type":["string","null"]}},"required":["id","label","source","url"]}}},"required":["id","lane","label","at","duration","gain","pan","muted","source","soundId","url","shotId","generating","alternatives"]}},"mix":{"type":"object","propertyNames":{"type":"string","enum":["dialogue","sfx","foley","ambience","music"]},"additionalProperties":{"type":"object","properties":{"gain":{"type":"number","minimum":-30,"maximum":12},"muted":{"type":"boolean"}},"required":["gain","muted"]},"required":["dialogue","sfx","foley","ambience","music"]},"duration":{"type":"number"},"creditsReserved":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"creditsCharged":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"regenerationsLeft":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"previousId":{"anyOf":[{"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)$"},{"type":"null"}]},"episode":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"output":{"anyOf":[{"type":"object","properties":{"videoUrl":{"type":["string","null"]},"downloadUrl":{"type":["string","null"]},"thumbnailUrl":{"type":["string","null"]},"watermarked":{"type":"boolean"},"generationId":{"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)$"},"duration":{"type":"number"},"stems":{"anyOf":[{"type":"object","propertyNames":{"type":"string","enum":["dialogue","sfx","foley","ambience","music"]},"additionalProperties":{"type":["string","null"]},"required":["dialogue","sfx","foley","ambience","music"]},{"type":"null"}],"description":"Signed WAV per lane (entitlement cartoonStems)"},"posterUrl":{"type":["string","null"]}},"required":["videoUrl","downloadUrl","thumbnailUrl","watermarked","generationId","duration","stems","posterUrl"]},{"type":"null"}]},"renderedAt":{"type":["string","null"]},"occasion":{"anyOf":[{"type":"string","enum":["birthday"]},{"type":"null"}],"description":"Set on a Birthday Hero video"},"hero":{"anyOf":[{"type":"object","properties":{"name":{"type":"string"},"age":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"gender":{"type":"string","enum":["boy","girl"]},"message":{"type":"string"},"details":{"type":"string"},"photoUrls":{"type":"array","items":{"type":"string"},"description":"Signed URLs of the uploaded photos (empty once deleted)"},"photosDeleted":{"type":"boolean"},"photosExpireAt":{"type":["string","null"]}},"required":["name","age","gender","message","details","photoUrls","photosDeleted","photosExpireAt"]},{"type":"null"}],"description":"The birthday child (Birthday Hero videos only)"}},"required":["id","createdAt","updatedAt","title","logline","idea","status","stage","progress","error","failedStage","errorPath","departments","mode","theme","lengthSeconds","dialect","aspectRatio","tier","captions","opening","characters","locations","shots","song","cues","mix","duration","creditsReserved","creditsCharged","regenerationsLeft","previousId","episode","output","renderedAt","occasion","hero"]},"example":{"id":"01990000-0000-7000-8000-000000000001","createdAt":"2026-09-19T12:00:00.000Z","updatedAt":"2026-09-19T12:00:00.000Z","title":"example","logline":"example","idea":"example","status":"writing","stage":"write","progress":1,"error":"example","failedStage":"write","errorPath":"example","departments":{"dialogue":1,"animation":1,"sound":1,"music":1,"mix":1},"mode":"auto","theme":{"id":"01990000-0000-7000-8000-000000000001","slug":"example","kind":"series","planet":"action","name":{"ar":"مثال","en":"example"},"tagline":{"ar":"مثال","en":"example"},"colors":{"from":"example","to":"example","accent":"example"},"emoji":"example","jingle":"mystery","coverUrl":"http://localhost:4000/example","sampleUrl":"http://localhost:4000/example","loopUrl":"http://localhost:4000/example","dialect":"ar-SA","narrator":true,"ideas":[{"ar":"مثال","en":"example"}],"cast":[{"id":"example","name":{"ar":"مثال","en":"example"},"appearance":"example","personality":"","gender":"male","age":"child","voiceId":null,"voiceFx":"none","imageUrl":"http://localhost:4000/example"}],"locked":true,"order":-9007199254740991},"lengthSeconds":-9007199254740991,"dialect":"ar-SA","aspectRatio":"9:16","tier":"example","captions":true,"opening":true,"characters":[{"id":"example","name":"Noura","role":"example","appearance":"example","personality":"example","gender":"male","age":"child","voiceId":"01990000-0000-7000-8000-000000000001","voiceFx":"none","castId":"example","sheetUrl":"http://localhost:4000/example","sheetStatus":"none"}],"locations":[{"id":"example","name":"Noura","description":"example","ambience":"example"}],"shots":[{"id":"example","locationId":"example","camera":"example","action":"example","summary":"example","characters":["example"],"lines":[{"id":"example","speaker":"example","text":"مرحباً بك في فوكلا.","emotion":"example","start":"example","end":"example","audioUrl":"http://localhost:4000/example"}],"sfx":[{"what":"example","label":"example","tags":["example"],"at":1,"intensity":"soft"}],"music":"none","start":"example","end":"example","status":"pending","frameUrl":"http://localhost:4000/example","clipUrl":"http://localhost:4000/example","error":"example","parentId":"example"}],"song":{"lyrics":"example"},"cues":[{"id":"example","lane":"sfx","label":"example","at":1,"duration":1,"gain":1,"pan":1,"muted":true,"source":"library","soundId":"01990000-0000-7000-8000-000000000001","url":"example","shotId":"example","generating":true,"alternatives":[{"id":"example","label":"example","source":"library","url":"example"}]}],"mix":{},"duration":1,"creditsReserved":-9007199254740991,"creditsCharged":-9007199254740991,"regenerationsLeft":-9007199254740991,"previousId":"01990000-0000-7000-8000-000000000001","episode":-9007199254740991,"output":{"videoUrl":"http://localhost:4000/example","downloadUrl":"http://localhost:4000/example","thumbnailUrl":"http://localhost:4000/example","watermarked":true,"generationId":"01990000-0000-7000-8000-000000000001","duration":1,"stems":{},"posterUrl":"http://localhost:4000/example"},"renderedAt":"2026-09-19T12:00:00.000Z","occasion":"birthday","hero":{"name":"Noura","age":-9007199254740991,"gender":"boy","message":"example","details":"example","photoUrls":["example"],"photosDeleted":true,"photosExpireAt":"2026-09-19T12:00:00.000Z"}}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/birthday-hero","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/birthday-hero","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/birthday-hero","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/birthday-hero","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/birthday-hero","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/birthday-hero","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/birthday-hero","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/birthday-hero","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/birthday-hero","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/birthday-hero","traceId":"request-id"}}}}}}},"/v1/cartoon/quote":{"post":{"operationId":"quoteCartoon","tags":["Cartoon"],"summary":"Credits and seconds for a new episode (estimated from its length) or for the production of a project","description":"Requires workspace role editor or above. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"X-CSRF-Token","in":"header","required":false,"description":"Required for cookie-authenticated mutations; returned by sign-in/sign-up.","schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"themeSlug":{"type":"string","minLength":1,"maxLength":80},"idea":{"type":"string","minLength":3,"maxLength":1500,"description":"One line (\"a cat who wants to be an astronaut\") or a whole story"},"lengthSeconds":{"default":30,"anyOf":[{"type":"number","const":20},{"type":"number","const":30},{"type":"number","const":45},{"type":"number","const":60},{"type":"number","const":90},{"type":"number","const":120},{"type":"number","const":150},{"type":"number","const":180}]},"dialect":{"description":"Default: the theme dialect","type":"string","minLength":2,"maxLength":20},"aspectRatio":{"default":"9:16","type":"string","enum":["9:16","16:9","1:1"]},"tier":{"description":"Video tier slug; default the theme tier or the cheapest allowed","type":"string","minLength":1,"maxLength":100},"mode":{"default":"auto","description":"auto: one click to a finished episode (credits reserved when production starts); director: stops for review after the screenplay, the cast and the storyboard","type":"string","enum":["auto","director"]},"castIds":{"description":"Series cast members to include","maxItems":12,"type":"array","items":{"type":"string","maxLength":40}},"captions":{"default":true,"type":"boolean"},"opening":{"description":"Retired: the sung opening is no longer made; ignored","type":"boolean"},"previousId":{"description":"Continue from this episode: same cast, sheets and world","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)$"},"projectId":{"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)$"}}},"example":{"themeSlug":"example","idea":"example","lengthSeconds":30,"dialect":"ar-SA","aspectRatio":"9:16","tier":"example","mode":"auto","castIds":["example"],"captions":true,"opening":true,"previousId":"01990000-0000-7000-8000-000000000001","projectId":"01990000-0000-7000-8000-000000000001"}}}},"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"seconds":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"credits":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"estimated":{"type":"boolean"},"breakdown":{"type":"object","properties":{"clips":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"lipSync":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Lip sync surcharge on talking shots (lipSyncPercent of their clips)"},"voices":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"sheets":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"stills":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"sfx":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"music":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"opening":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}},"required":["clips","lipSync","voices","sheets","stills","sfx","music","opening"]}},"required":["seconds","credits","estimated","breakdown"]},"example":{"seconds":-9007199254740991,"credits":-9007199254740991,"estimated":true,"breakdown":{"clips":-9007199254740991,"lipSync":-9007199254740991,"voices":-9007199254740991,"sheets":-9007199254740991,"stills":-9007199254740991,"sfx":-9007199254740991,"music":-9007199254740991,"opening":-9007199254740991}}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/cartoon/quote","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/cartoon/quote","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/cartoon/quote","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/cartoon/quote","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/cartoon/quote","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/cartoon/quote","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/cartoon/quote","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/cartoon/quote","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/cartoon/quote","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/cartoon/quote","traceId":"request-id"}}}}}}},"/v1/video/edits/options":{"get":{"operationId":"getVideoEditOptions","tags":["Video edit"],"summary":"Whether the plan includes video editing, the tiers it may use with their credits per second, seconds used this month and the clip limits","description":"Requires workspace role viewer or above. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false}],"security":[{"session":[]},{"apiKey":[]}],"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"plan":{"type":"string"},"included":{"type":"boolean","description":"The plan includes the video edit studio"},"available":{"type":"boolean","description":"A provider serves an allowed tier (false until the provider key is configured)"},"limits":{"type":"object","properties":{"videoEdit":{"default":false,"description":"AI video edit studio (remove, add, replace); refusals are 403 with errors[0].path = the entitlement key","type":"boolean"},"videoEditSecondsPerMonth":{"default":0,"description":"Read only: seconds of edits the monthly credits of the plan buy on its cheapest tier (credits ÷ credits per second). Worked out on every read; a saved value is ignored. Not a cap: edits are limited by credits alone, top-ups included","type":"integer","minimum":0,"maximum":100000000},"videoEditMaxSeconds":{"default":0,"description":"Longest clip (seconds) one edit may take (the model itself takes 3 to 15)","type":"integer","minimum":0,"maximum":120},"videoEditTiers":{"default":[],"description":"Edit quality tiers (product model slugs with data.videoEdit) the plan may use","maxItems":20,"type":"array","items":{"type":"string","minLength":1,"maxLength":100}},"videoEditConcurrent":{"default":0,"description":"Edits running at once per workspace","type":"integer","minimum":0,"maximum":32},"videoEditRates":{"default":{},"description":"Credits per second this plan pays on a tier (tier slug → credits); a tier left out costs its own rate. Read back with every tier of the plan filled in","type":"object","propertyNames":{"type":"string","minLength":1,"maxLength":100},"additionalProperties":{"type":"integer","minimum":1,"maximum":1000000}}}},"usedSeconds":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Seconds edited this calendar month (UTC), edits in progress included"},"remainingSeconds":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Seconds the credits of the workspace (plan credits and top-ups) buy on the cheapest tier it may use"},"balance":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Credits the workspace has now"},"running":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Edits in progress"},"tiers":{"type":"array","items":{"type":"object","properties":{"slug":{"type":"string"},"name":{"type":"object","properties":{"ar":{"type":"string","minLength":1},"en":{"type":"string","minLength":1}},"required":["ar","en"]},"description":{"anyOf":[{"type":"object","properties":{"ar":{"type":"string","minLength":1},"en":{"type":"string","minLength":1}},"required":["ar","en"]},{"type":"null"}]},"creditsPerSecond":{"type":"number"},"resolution":{"type":"string","description":"What the tier returns: 720p, 1080p or 4k"},"available":{"type":"boolean","description":"A real provider serves this tier"},"unavailableReason":{"anyOf":[{"type":"string","enum":["disabled","no_provider"]},{"type":"null"}]}},"required":["slug","name","description","creditsPerSecond","resolution","available","unavailableReason"]},"description":"Tiers the plan may use"},"lockedTiers":{"type":"array","items":{"type":"object","properties":{"slug":{"type":"string"},"name":{"type":"object","properties":{"ar":{"type":"string","minLength":1},"en":{"type":"string","minLength":1}},"required":["ar","en"]},"description":{"anyOf":[{"type":"object","properties":{"ar":{"type":"string","minLength":1},"en":{"type":"string","minLength":1}},"required":["ar","en"]},{"type":"null"}]},"creditsPerSecond":{"type":"number"},"resolution":{"type":"string","description":"What the tier returns: 720p, 1080p or 4k"},"available":{"type":"boolean","description":"A real provider serves this tier"},"unavailableReason":{"anyOf":[{"type":"string","enum":["disabled","no_provider"]},{"type":"null"}]}},"required":["slug","name","description","creditsPerSecond","resolution","available","unavailableReason"]},"description":"Tiers of higher plans"},"clip":{"type":"object","properties":{"minSeconds":{"type":"number"},"maxSeconds":{"type":"number","description":"The lower of the plan limit and what the model takes"},"maxSourceSeconds":{"type":"number","description":"The longest upload taken when a part of it is chosen with `trim`"},"maxBytes":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"maxReferences":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"contentTypes":{"type":"array","items":{"type":"string"}}},"required":["minSeconds","maxSeconds","maxSourceSeconds","maxBytes","maxReferences","contentTypes"]},"policyVersion":{"type":"string"}},"required":["plan","included","available","limits","usedSeconds","remainingSeconds","balance","running","tiers","lockedTiers","clip","policyVersion"]},"example":{"plan":"example","included":true,"available":true,"limits":{"videoEdit":false,"videoEditSecondsPerMonth":0,"videoEditMaxSeconds":0,"videoEditTiers":[],"videoEditConcurrent":0,"videoEditRates":{}},"usedSeconds":-9007199254740991,"remainingSeconds":-9007199254740991,"balance":-9007199254740991,"running":-9007199254740991,"tiers":[{"slug":"example","name":{"ar":"مثال","en":"example"},"description":{"ar":"مثال","en":"example"},"creditsPerSecond":1,"resolution":"example","available":true,"unavailableReason":"disabled"}],"lockedTiers":[{"slug":"example","name":{"ar":"مثال","en":"example"},"description":{"ar":"مثال","en":"example"},"creditsPerSecond":1,"resolution":"example","available":true,"unavailableReason":"disabled"}],"clip":{"minSeconds":1,"maxSeconds":1,"maxSourceSeconds":1,"maxBytes":-9007199254740991,"maxReferences":-9007199254740991,"contentTypes":["example"]},"policyVersion":"example"}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/video/edits/options","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/video/edits/options","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/video/edits/options","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/video/edits/options","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/video/edits/options","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/video/edits/options","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/video/edits/options","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/video/edits/options","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/video/edits/options","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/video/edits/options","traceId":"request-id"}}}}}}},"/v1/video/edits":{"get":{"operationId":"listVideoEdits","tags":["Video edit"],"summary":"list Video Edits","description":"Requires workspace role viewer or above. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"cursor","in":"query","required":false,"schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"schema":{"default":25,"type":"integer","minimum":1,"maximum":100}},{"name":"q","in":"query","required":false,"schema":{"type":"string","maxLength":200}}],"security":[{"session":[]},{"apiKey":[]}],"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"items":{"type":"array","items":{"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)$"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"},"data":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}},"title":{"type":"string"},"status":{"type":"string","enum":["preparing","rendering","finishing","ready","failed"],"description":"preparing = checking and conforming the clip; rendering = the model is editing; finishing = original sound laid back"},"progress":{"type":"number"},"error":{"description":"CLIP_REJECTED (unreadable or outside the limits), CONTENT_BLOCKED (our policy), CONTENT_REJECTED (the model moderation), EDIT_FAILED, EDIT_TIMEOUT, PROVIDER_UNAVAILABLE","type":["string","null"]},"operation":{"type":"string","enum":["remove","add","replace","restyle"],"description":"remove = take something out; add = put in what the reference photo shows; replace = swap people or objects for the ones in the reference photos; restyle = change the look of the whole clip (style, colour grade, lighting, mood) and keep everything in it; reference photos optional (a style to follow)"},"prompt":{"type":"string"},"tier":{"type":"string"},"tierName":{"anyOf":[{"type":"object","properties":{"ar":{"type":"string","minLength":1},"en":{"type":"string","minLength":1}},"required":["ar","en"]},{"type":"null"}]},"source":{"anyOf":[{"type":"object","properties":{"url":{"type":["string","null"]},"thumbnailUrl":{"type":["string","null"]},"duration":{"type":"number"},"width":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"height":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"hasAudio":{"type":"boolean"}},"required":["url","thumbnailUrl","duration","width","height","hasAudio"]},{"type":"null"}],"description":"The original clip (null until prepared)"},"references":{"type":"array","items":{"type":"object","properties":{"url":{"type":["string","null"]}},"required":["url"]}},"output":{"type":"object","properties":{"videoUrl":{"type":["string","null"]},"downloadUrl":{"type":["string","null"]},"thumbnailUrl":{"type":["string","null"]},"duration":{"type":"number"},"width":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"height":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"generationId":{"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":"The edit in the Library"}},"required":["videoUrl","downloadUrl","thumbnailUrl","duration","width","height","generationId"]},"creditsReserved":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"creditsCharged":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"generationId":{"anyOf":[{"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)$"},{"type":"null"}]},"clientId":{"anyOf":[{"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)$"},{"type":"null"}]},"finishedAt":{"type":["string","null"]},"template":{"description":"The video template the edit started from","anyOf":[{"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)$"},"slug":{"type":"string"},"title":{"type":"object","properties":{"ar":{"type":"string"},"en":{"type":"string"}},"required":["ar","en"]}},"required":["id","slug","title"]},{"type":"null"}]}},"required":["id","createdAt","updatedAt","title","status","progress","error","operation","prompt","tier","tierName","source","references","creditsReserved","creditsCharged","generationId","clientId","finishedAt"],"additionalProperties":{}}},"nextCursor":{"type":["string","null"]}},"required":["items","nextCursor"]},"example":{"items":[{"id":"01990000-0000-7000-8000-000000000001","createdAt":"2026-09-19T12:00:00.000Z","updatedAt":"2026-09-19T12:00:00.000Z","data":{},"title":"example","status":"preparing","progress":1,"error":"example","operation":"remove","prompt":"مرحباً بك في فوكلا.","tier":"example","tierName":{"ar":"مثال","en":"example"},"source":{"url":"example","thumbnailUrl":"http://localhost:4000/example","duration":1,"width":-9007199254740991,"height":-9007199254740991,"hasAudio":true},"references":[{"url":"example"}],"output":{"videoUrl":"http://localhost:4000/example","downloadUrl":"http://localhost:4000/example","thumbnailUrl":"http://localhost:4000/example","duration":1,"width":-9007199254740991,"height":-9007199254740991,"generationId":"01990000-0000-7000-8000-000000000001"},"creditsReserved":-9007199254740991,"creditsCharged":-9007199254740991,"generationId":"01990000-0000-7000-8000-000000000001","clientId":"01990000-0000-7000-8000-000000000001","finishedAt":"2026-09-19T12:00:00.000Z","template":{"id":"01990000-0000-7000-8000-000000000001","slug":"example","title":{"ar":"مثال","en":"example"}}}],"nextCursor":"example"}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/video/edits","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/video/edits","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/video/edits","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/video/edits","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/video/edits","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/video/edits","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/video/edits","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/video/edits","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/video/edits","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/video/edits","traceId":"request-id"}}}}}},"post":{"operationId":"createVideoEdit","tags":["Video edit"],"summary":"Edit a clip: credits for its seconds are reserved, the clip is checked and conformed, the model edits it and the original sound is laid back. A failed or refused edit is refunded in full. A 403 names the plan limit in errors[0].path","description":"Requires workspace role editor or above. Retry with the same Idempotency-Key and identical body. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"Idempotency-Key","in":"header","required":true,"schema":{"type":"string","maxLength":200},"example":"request-2026-001"},{"name":"X-CSRF-Token","in":"header","required":false,"description":"Required for cookie-authenticated mutations; returned by sign-in/sign-up.","schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"title":{"type":"string","maxLength":120},"operation":{"description":"Required unless templateId is given (the template sets it)","type":"string","enum":["remove","add","replace","restyle"]},"prompt":{"description":"What to remove, add or replace, in any language (it is rewritten in English for the model); at least 3 characters unless templateId is given (the template carries its own instruction)","type":"string","maxLength":1000},"templateId":{"description":"Start from a published video template: its clip, action and instruction are used, and imageUploadIds must hold one photo per template slot; takes the place of videoUploadId","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)$"},"videoUploadId":{"description":"A validated video upload (MP4, MOV or WebM; sound optional), up to 60 seconds long; one longer than the clip limit needs `trim`","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)$"},"trim":{"description":"Edit only this part of the upload (videoUploadId only). Its length must be inside the clip limits; credits are charged for it alone","type":"object","properties":{"start":{"type":"number","minimum":0,"maximum":600},"end":{"type":"number","exclusiveMinimum":0,"maximum":600}},"required":["start","end"]},"fromEditId":{"description":"Edit the original clip of an earlier edit again (no new upload); takes the place of videoUploadId","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)$"},"imageUploadIds":{"default":[],"description":"Reference photos, in the order the prompt names them: required for add and replace (one per character or object), none for remove. With fromEditId and none given, add and replace reuse the photos of that edit","maxItems":4,"type":"array","items":{"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)$"}},"tier":{"type":"string","minLength":1,"maxLength":100,"description":"Edit quality tier slug (vedit-standard, vedit-pro)"},"consent":{"type":"object","properties":{"confirmed":{"type":"boolean","const":true,"description":"The user has the rights to the clip and the permission of every person in it and in the reference photos"},"policyVersion":{"type":"string","minLength":1,"maxLength":20}},"required":["confirmed","policyVersion"]},"clientId":{"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)$"}},"required":["tier","consent"]},"example":{"title":"example","operation":"remove","prompt":"مرحباً بك في فوكلا.","templateId":"01990000-0000-7000-8000-000000000001","videoUploadId":"01990000-0000-7000-8000-000000000001","trim":{"start":0,"end":1},"fromEditId":"01990000-0000-7000-8000-000000000001","imageUploadIds":[],"tier":"example","consent":{"confirmed":true,"policyVersion":"example"},"clientId":"01990000-0000-7000-8000-000000000001"}}}},"responses":{"202":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","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)$"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"},"data":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}},"title":{"type":"string"},"status":{"type":"string","enum":["preparing","rendering","finishing","ready","failed"],"description":"preparing = checking and conforming the clip; rendering = the model is editing; finishing = original sound laid back"},"progress":{"type":"number"},"error":{"description":"CLIP_REJECTED (unreadable or outside the limits), CONTENT_BLOCKED (our policy), CONTENT_REJECTED (the model moderation), EDIT_FAILED, EDIT_TIMEOUT, PROVIDER_UNAVAILABLE","type":["string","null"]},"operation":{"type":"string","enum":["remove","add","replace","restyle"],"description":"remove = take something out; add = put in what the reference photo shows; replace = swap people or objects for the ones in the reference photos; restyle = change the look of the whole clip (style, colour grade, lighting, mood) and keep everything in it; reference photos optional (a style to follow)"},"prompt":{"type":"string"},"tier":{"type":"string"},"tierName":{"anyOf":[{"type":"object","properties":{"ar":{"type":"string","minLength":1},"en":{"type":"string","minLength":1}},"required":["ar","en"]},{"type":"null"}]},"source":{"anyOf":[{"type":"object","properties":{"url":{"type":["string","null"]},"thumbnailUrl":{"type":["string","null"]},"duration":{"type":"number"},"width":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"height":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"hasAudio":{"type":"boolean"}},"required":["url","thumbnailUrl","duration","width","height","hasAudio"]},{"type":"null"}],"description":"The original clip (null until prepared)"},"references":{"type":"array","items":{"type":"object","properties":{"url":{"type":["string","null"]}},"required":["url"]}},"output":{"type":"object","properties":{"videoUrl":{"type":["string","null"]},"downloadUrl":{"type":["string","null"]},"thumbnailUrl":{"type":["string","null"]},"duration":{"type":"number"},"width":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"height":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"generationId":{"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":"The edit in the Library"}},"required":["videoUrl","downloadUrl","thumbnailUrl","duration","width","height","generationId"]},"creditsReserved":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"creditsCharged":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"generationId":{"anyOf":[{"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)$"},{"type":"null"}]},"clientId":{"anyOf":[{"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)$"},{"type":"null"}]},"finishedAt":{"type":["string","null"]},"template":{"description":"The video template the edit started from","anyOf":[{"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)$"},"slug":{"type":"string"},"title":{"type":"object","properties":{"ar":{"type":"string"},"en":{"type":"string"}},"required":["ar","en"]}},"required":["id","slug","title"]},{"type":"null"}]}},"required":["id","createdAt","updatedAt","title","status","progress","error","operation","prompt","tier","tierName","source","references","creditsReserved","creditsCharged","generationId","clientId","finishedAt"],"additionalProperties":{}},"example":{"id":"01990000-0000-7000-8000-000000000001","createdAt":"2026-09-19T12:00:00.000Z","updatedAt":"2026-09-19T12:00:00.000Z","data":{},"title":"example","status":"preparing","progress":1,"error":"example","operation":"remove","prompt":"مرحباً بك في فوكلا.","tier":"example","tierName":{"ar":"مثال","en":"example"},"source":{"url":"example","thumbnailUrl":"http://localhost:4000/example","duration":1,"width":-9007199254740991,"height":-9007199254740991,"hasAudio":true},"references":[{"url":"example"}],"output":{"videoUrl":"http://localhost:4000/example","downloadUrl":"http://localhost:4000/example","thumbnailUrl":"http://localhost:4000/example","duration":1,"width":-9007199254740991,"height":-9007199254740991,"generationId":"01990000-0000-7000-8000-000000000001"},"creditsReserved":-9007199254740991,"creditsCharged":-9007199254740991,"generationId":"01990000-0000-7000-8000-000000000001","clientId":"01990000-0000-7000-8000-000000000001","finishedAt":"2026-09-19T12:00:00.000Z","template":{"id":"01990000-0000-7000-8000-000000000001","slug":"example","title":{"ar":"مثال","en":"example"}}}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/video/edits","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/video/edits","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/video/edits","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/video/edits","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/video/edits","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/video/edits","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/video/edits","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/video/edits","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/video/edits","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/video/edits","traceId":"request-id"}}}}}}},"/v1/video/edits/quote":{"post":{"operationId":"quoteVideoEdit","tags":["Video edit"],"summary":"Credits and seconds for editing a clip (an upload, an earlier edit or a template) on a tier","description":"Requires workspace role editor or above. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"X-CSRF-Token","in":"header","required":false,"description":"Required for cookie-authenticated mutations; returned by sign-in/sign-up.","schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"videoUploadId":{"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)$"},"trim":{"type":"object","properties":{"start":{"type":"number","minimum":0,"maximum":600},"end":{"type":"number","exclusiveMinimum":0,"maximum":600}},"required":["start","end"]},"fromEditId":{"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)$"},"templateId":{"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)$"},"tier":{"type":"string","minLength":1,"maxLength":100}},"required":["tier"]},"example":{"videoUploadId":"01990000-0000-7000-8000-000000000001","trim":{"start":0,"end":1},"fromEditId":"01990000-0000-7000-8000-000000000001","templateId":"01990000-0000-7000-8000-000000000001","tier":"example"}}}},"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"seconds":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Seconds charged and counted against the monthly allowance (the clip length rounded up)"},"creditsPerSecond":{"type":"number"},"credits":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}},"required":["seconds","creditsPerSecond","credits"]},"example":{"seconds":-9007199254740991,"creditsPerSecond":1,"credits":-9007199254740991}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/video/edits/quote","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/video/edits/quote","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/video/edits/quote","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/video/edits/quote","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/video/edits/quote","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/video/edits/quote","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/video/edits/quote","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/video/edits/quote","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/video/edits/quote","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/video/edits/quote","traceId":"request-id"}}}}}}},"/v1/video/edits/{id}":{"get":{"operationId":"getVideoEdit","tags":["Video edit"],"summary":"get Video Edit","description":"Requires workspace role viewer or above. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","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)$"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"},"data":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}},"title":{"type":"string"},"status":{"type":"string","enum":["preparing","rendering","finishing","ready","failed"],"description":"preparing = checking and conforming the clip; rendering = the model is editing; finishing = original sound laid back"},"progress":{"type":"number"},"error":{"description":"CLIP_REJECTED (unreadable or outside the limits), CONTENT_BLOCKED (our policy), CONTENT_REJECTED (the model moderation), EDIT_FAILED, EDIT_TIMEOUT, PROVIDER_UNAVAILABLE","type":["string","null"]},"operation":{"type":"string","enum":["remove","add","replace","restyle"],"description":"remove = take something out; add = put in what the reference photo shows; replace = swap people or objects for the ones in the reference photos; restyle = change the look of the whole clip (style, colour grade, lighting, mood) and keep everything in it; reference photos optional (a style to follow)"},"prompt":{"type":"string"},"tier":{"type":"string"},"tierName":{"anyOf":[{"type":"object","properties":{"ar":{"type":"string","minLength":1},"en":{"type":"string","minLength":1}},"required":["ar","en"]},{"type":"null"}]},"source":{"anyOf":[{"type":"object","properties":{"url":{"type":["string","null"]},"thumbnailUrl":{"type":["string","null"]},"duration":{"type":"number"},"width":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"height":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"hasAudio":{"type":"boolean"}},"required":["url","thumbnailUrl","duration","width","height","hasAudio"]},{"type":"null"}],"description":"The original clip (null until prepared)"},"references":{"type":"array","items":{"type":"object","properties":{"url":{"type":["string","null"]}},"required":["url"]}},"output":{"type":"object","properties":{"videoUrl":{"type":["string","null"]},"downloadUrl":{"type":["string","null"]},"thumbnailUrl":{"type":["string","null"]},"duration":{"type":"number"},"width":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"height":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"generationId":{"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":"The edit in the Library"}},"required":["videoUrl","downloadUrl","thumbnailUrl","duration","width","height","generationId"]},"creditsReserved":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"creditsCharged":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"generationId":{"anyOf":[{"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)$"},{"type":"null"}]},"clientId":{"anyOf":[{"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)$"},{"type":"null"}]},"finishedAt":{"type":["string","null"]},"template":{"description":"The video template the edit started from","anyOf":[{"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)$"},"slug":{"type":"string"},"title":{"type":"object","properties":{"ar":{"type":"string"},"en":{"type":"string"}},"required":["ar","en"]}},"required":["id","slug","title"]},{"type":"null"}]}},"required":["id","createdAt","updatedAt","title","status","progress","error","operation","prompt","tier","tierName","source","references","creditsReserved","creditsCharged","generationId","clientId","finishedAt"],"additionalProperties":{}},"example":{"id":"01990000-0000-7000-8000-000000000001","createdAt":"2026-09-19T12:00:00.000Z","updatedAt":"2026-09-19T12:00:00.000Z","data":{},"title":"example","status":"preparing","progress":1,"error":"example","operation":"remove","prompt":"مرحباً بك في فوكلا.","tier":"example","tierName":{"ar":"مثال","en":"example"},"source":{"url":"example","thumbnailUrl":"http://localhost:4000/example","duration":1,"width":-9007199254740991,"height":-9007199254740991,"hasAudio":true},"references":[{"url":"example"}],"output":{"videoUrl":"http://localhost:4000/example","downloadUrl":"http://localhost:4000/example","thumbnailUrl":"http://localhost:4000/example","duration":1,"width":-9007199254740991,"height":-9007199254740991,"generationId":"01990000-0000-7000-8000-000000000001"},"creditsReserved":-9007199254740991,"creditsCharged":-9007199254740991,"generationId":"01990000-0000-7000-8000-000000000001","clientId":"01990000-0000-7000-8000-000000000001","finishedAt":"2026-09-19T12:00:00.000Z","template":{"id":"01990000-0000-7000-8000-000000000001","slug":"example","title":{"ar":"مثال","en":"example"}}}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/video/edits/{id}","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/video/edits/{id}","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/video/edits/{id}","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/video/edits/{id}","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/video/edits/{id}","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/video/edits/{id}","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/video/edits/{id}","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/video/edits/{id}","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/video/edits/{id}","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/video/edits/{id}","traceId":"request-id"}}}}}},"patch":{"operationId":"updateVideoEdit","tags":["Video edit"],"summary":"update Video Edit","description":"Requires workspace role editor or above. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"X-CSRF-Token","in":"header","required":false,"description":"Required for cookie-authenticated mutations; returned by sign-in/sign-up.","schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"title":{"type":"string","minLength":1,"maxLength":120}},"required":["title"]},"example":{"title":"example"}}}},"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","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)$"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"},"data":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}},"title":{"type":"string"},"status":{"type":"string","enum":["preparing","rendering","finishing","ready","failed"],"description":"preparing = checking and conforming the clip; rendering = the model is editing; finishing = original sound laid back"},"progress":{"type":"number"},"error":{"description":"CLIP_REJECTED (unreadable or outside the limits), CONTENT_BLOCKED (our policy), CONTENT_REJECTED (the model moderation), EDIT_FAILED, EDIT_TIMEOUT, PROVIDER_UNAVAILABLE","type":["string","null"]},"operation":{"type":"string","enum":["remove","add","replace","restyle"],"description":"remove = take something out; add = put in what the reference photo shows; replace = swap people or objects for the ones in the reference photos; restyle = change the look of the whole clip (style, colour grade, lighting, mood) and keep everything in it; reference photos optional (a style to follow)"},"prompt":{"type":"string"},"tier":{"type":"string"},"tierName":{"anyOf":[{"type":"object","properties":{"ar":{"type":"string","minLength":1},"en":{"type":"string","minLength":1}},"required":["ar","en"]},{"type":"null"}]},"source":{"anyOf":[{"type":"object","properties":{"url":{"type":["string","null"]},"thumbnailUrl":{"type":["string","null"]},"duration":{"type":"number"},"width":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"height":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"hasAudio":{"type":"boolean"}},"required":["url","thumbnailUrl","duration","width","height","hasAudio"]},{"type":"null"}],"description":"The original clip (null until prepared)"},"references":{"type":"array","items":{"type":"object","properties":{"url":{"type":["string","null"]}},"required":["url"]}},"output":{"type":"object","properties":{"videoUrl":{"type":["string","null"]},"downloadUrl":{"type":["string","null"]},"thumbnailUrl":{"type":["string","null"]},"duration":{"type":"number"},"width":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"height":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"generationId":{"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":"The edit in the Library"}},"required":["videoUrl","downloadUrl","thumbnailUrl","duration","width","height","generationId"]},"creditsReserved":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"creditsCharged":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"generationId":{"anyOf":[{"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)$"},{"type":"null"}]},"clientId":{"anyOf":[{"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)$"},{"type":"null"}]},"finishedAt":{"type":["string","null"]},"template":{"description":"The video template the edit started from","anyOf":[{"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)$"},"slug":{"type":"string"},"title":{"type":"object","properties":{"ar":{"type":"string"},"en":{"type":"string"}},"required":["ar","en"]}},"required":["id","slug","title"]},{"type":"null"}]}},"required":["id","createdAt","updatedAt","title","status","progress","error","operation","prompt","tier","tierName","source","references","creditsReserved","creditsCharged","generationId","clientId","finishedAt"],"additionalProperties":{}},"example":{"id":"01990000-0000-7000-8000-000000000001","createdAt":"2026-09-19T12:00:00.000Z","updatedAt":"2026-09-19T12:00:00.000Z","data":{},"title":"example","status":"preparing","progress":1,"error":"example","operation":"remove","prompt":"مرحباً بك في فوكلا.","tier":"example","tierName":{"ar":"مثال","en":"example"},"source":{"url":"example","thumbnailUrl":"http://localhost:4000/example","duration":1,"width":-9007199254740991,"height":-9007199254740991,"hasAudio":true},"references":[{"url":"example"}],"output":{"videoUrl":"http://localhost:4000/example","downloadUrl":"http://localhost:4000/example","thumbnailUrl":"http://localhost:4000/example","duration":1,"width":-9007199254740991,"height":-9007199254740991,"generationId":"01990000-0000-7000-8000-000000000001"},"creditsReserved":-9007199254740991,"creditsCharged":-9007199254740991,"generationId":"01990000-0000-7000-8000-000000000001","clientId":"01990000-0000-7000-8000-000000000001","finishedAt":"2026-09-19T12:00:00.000Z","template":{"id":"01990000-0000-7000-8000-000000000001","slug":"example","title":{"ar":"مثال","en":"example"}}}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/video/edits/{id}","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/video/edits/{id}","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/video/edits/{id}","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/video/edits/{id}","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/video/edits/{id}","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/video/edits/{id}","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/video/edits/{id}","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/video/edits/{id}","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/video/edits/{id}","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/video/edits/{id}","traceId":"request-id"}}}}}},"delete":{"operationId":"deleteVideoEdit","tags":["Video edit"],"summary":"Delete the edit (one in progress is cancelled and its credits released); the finished video stays in the Library","description":"Requires workspace role editor or above. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"X-CSRF-Token","in":"header","required":false,"description":"Required for cookie-authenticated mutations; returned by sign-in/sign-up.","schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"ok":{"type":"boolean"}},"required":["ok"]},"example":{"ok":true}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/video/edits/{id}","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/video/edits/{id}","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/video/edits/{id}","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/video/edits/{id}","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/video/edits/{id}","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/video/edits/{id}","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/video/edits/{id}","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/video/edits/{id}","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/video/edits/{id}","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/video/edits/{id}","traceId":"request-id"}}}}}}},"/v1/video/edits/{id}/retry":{"post":{"operationId":"retryVideoEdit","tags":["Video edit"],"summary":"Run a failed edit again with the same clip, references and instruction (its credits were refunded; they are reserved again)","description":"Requires workspace role editor or above. Retry with the same Idempotency-Key and identical body. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"Idempotency-Key","in":"header","required":true,"schema":{"type":"string","maxLength":200},"example":"request-2026-001"},{"name":"X-CSRF-Token","in":"header","required":false,"description":"Required for cookie-authenticated mutations; returned by sign-in/sign-up.","schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"responses":{"202":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","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)$"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"},"data":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}},"title":{"type":"string"},"status":{"type":"string","enum":["preparing","rendering","finishing","ready","failed"],"description":"preparing = checking and conforming the clip; rendering = the model is editing; finishing = original sound laid back"},"progress":{"type":"number"},"error":{"description":"CLIP_REJECTED (unreadable or outside the limits), CONTENT_BLOCKED (our policy), CONTENT_REJECTED (the model moderation), EDIT_FAILED, EDIT_TIMEOUT, PROVIDER_UNAVAILABLE","type":["string","null"]},"operation":{"type":"string","enum":["remove","add","replace","restyle"],"description":"remove = take something out; add = put in what the reference photo shows; replace = swap people or objects for the ones in the reference photos; restyle = change the look of the whole clip (style, colour grade, lighting, mood) and keep everything in it; reference photos optional (a style to follow)"},"prompt":{"type":"string"},"tier":{"type":"string"},"tierName":{"anyOf":[{"type":"object","properties":{"ar":{"type":"string","minLength":1},"en":{"type":"string","minLength":1}},"required":["ar","en"]},{"type":"null"}]},"source":{"anyOf":[{"type":"object","properties":{"url":{"type":["string","null"]},"thumbnailUrl":{"type":["string","null"]},"duration":{"type":"number"},"width":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"height":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"hasAudio":{"type":"boolean"}},"required":["url","thumbnailUrl","duration","width","height","hasAudio"]},{"type":"null"}],"description":"The original clip (null until prepared)"},"references":{"type":"array","items":{"type":"object","properties":{"url":{"type":["string","null"]}},"required":["url"]}},"output":{"type":"object","properties":{"videoUrl":{"type":["string","null"]},"downloadUrl":{"type":["string","null"]},"thumbnailUrl":{"type":["string","null"]},"duration":{"type":"number"},"width":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"height":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"generationId":{"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":"The edit in the Library"}},"required":["videoUrl","downloadUrl","thumbnailUrl","duration","width","height","generationId"]},"creditsReserved":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"creditsCharged":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"generationId":{"anyOf":[{"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)$"},{"type":"null"}]},"clientId":{"anyOf":[{"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)$"},{"type":"null"}]},"finishedAt":{"type":["string","null"]},"template":{"description":"The video template the edit started from","anyOf":[{"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)$"},"slug":{"type":"string"},"title":{"type":"object","properties":{"ar":{"type":"string"},"en":{"type":"string"}},"required":["ar","en"]}},"required":["id","slug","title"]},{"type":"null"}]}},"required":["id","createdAt","updatedAt","title","status","progress","error","operation","prompt","tier","tierName","source","references","creditsReserved","creditsCharged","generationId","clientId","finishedAt"],"additionalProperties":{}},"example":{"id":"01990000-0000-7000-8000-000000000001","createdAt":"2026-09-19T12:00:00.000Z","updatedAt":"2026-09-19T12:00:00.000Z","data":{},"title":"example","status":"preparing","progress":1,"error":"example","operation":"remove","prompt":"مرحباً بك في فوكلا.","tier":"example","tierName":{"ar":"مثال","en":"example"},"source":{"url":"example","thumbnailUrl":"http://localhost:4000/example","duration":1,"width":-9007199254740991,"height":-9007199254740991,"hasAudio":true},"references":[{"url":"example"}],"output":{"videoUrl":"http://localhost:4000/example","downloadUrl":"http://localhost:4000/example","thumbnailUrl":"http://localhost:4000/example","duration":1,"width":-9007199254740991,"height":-9007199254740991,"generationId":"01990000-0000-7000-8000-000000000001"},"creditsReserved":-9007199254740991,"creditsCharged":-9007199254740991,"generationId":"01990000-0000-7000-8000-000000000001","clientId":"01990000-0000-7000-8000-000000000001","finishedAt":"2026-09-19T12:00:00.000Z","template":{"id":"01990000-0000-7000-8000-000000000001","slug":"example","title":{"ar":"مثال","en":"example"}}}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/video/edits/{id}/retry","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/video/edits/{id}/retry","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/video/edits/{id}/retry","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/video/edits/{id}/retry","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/video/edits/{id}/retry","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/video/edits/{id}/retry","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/video/edits/{id}/retry","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/video/edits/{id}/retry","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/video/edits/{id}/retry","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/video/edits/{id}/retry","traceId":"request-id"}}}}}}},"/v1/ad-spots/options":{"get":{"operationId":"getAdSpotOptions","tags":["Ad spots"],"summary":"Whether the plan includes ad spots, credits of a music bed and an effect, lengths, styles, moods, built-in stingers and the loudness destinations","description":"Requires workspace role viewer or above. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false}],"security":[{"session":[]},{"apiKey":[]}],"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"included":{"type":"boolean","description":"The plan includes ad spots (plan switch adSpots)"},"musicIncluded":{"type":"boolean","description":"The plan includes music (making a bed); library beds and uploads work without it"},"credits":{"type":"object","properties":{"music":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"sfx":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"ttsPer1000":{"type":"number","description":"Credits per 1000 characters of the default voice model"}},"required":["music","sfx","ttsPer1000"]},"lengths":{"type":"array","items":{"anyOf":[{"type":"number","const":6},{"type":"number","const":15},{"type":"number","const":30},{"type":"number","const":60}],"description":"Spot length in seconds: 6 (bumper), 15, 30 or 60"}},"styles":{"type":"array","items":{"type":"string","enum":["retail","luxury","family","funny","seasonal","real-estate","food","tech"],"description":"Tone preset: energetic retail, luxury, warm family, funny, Ramadan/Eid seasonal, real estate, restaurant/food, tech/app"}},"moods":{"type":"array","items":{"type":"string","enum":["upbeat","corporate","luxury","warm","quirky","oriental","khaleeji","cinematic","chill","electronic"],"description":"Music bed mood"}},"stingers":{"type":"array","items":{"type":"string","enum":["whoosh","whoosh-fast","sparkle","ding","tada","victory-jingle","impact","magic-shimmer","reveal-sting","drum-roll"]}},"destinations":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","enum":["broadcast","broadcast-us","social","podcast"]},"lufs":{"type":"number"},"truePeak":{"type":"number"},"standard":{"type":"string"}},"required":["id","lufs","truePeak","standard"]}},"wordsPerSecond":{"type":"number","description":"Speech pace of the estimate the studio uses"}},"required":["included","musicIncluded","credits","lengths","styles","moods","stingers","destinations","wordsPerSecond"]},"example":{"included":true,"musicIncluded":true,"credits":{"music":-9007199254740991,"sfx":-9007199254740991,"ttsPer1000":1},"lengths":[6],"styles":["retail"],"moods":["upbeat"],"stingers":["whoosh"],"destinations":[{"id":"broadcast","lufs":1,"truePeak":1,"standard":"example"}],"wordsPerSecond":1}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/ad-spots/options","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/ad-spots/options","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/ad-spots/options","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/ad-spots/options","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/ad-spots/options","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/ad-spots/options","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/ad-spots/options","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/ad-spots/options","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/ad-spots/options","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/ad-spots/options","traceId":"request-id"}}}}}}},"/v1/ad-spots":{"get":{"operationId":"listAdSpots","tags":["Ad spots"],"summary":"list Ad Spots","description":"Requires workspace role viewer or above. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"cursor","in":"query","required":false,"schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"schema":{"default":25,"type":"integer","minimum":1,"maximum":100}},{"name":"q","in":"query","required":false,"schema":{"type":"string","maxLength":200}}],"security":[{"session":[]},{"apiKey":[]}],"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"items":{"type":"array","items":{"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)$"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"},"title":{"type":"string"},"campaignId":{"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":"The first spot of the campaign (itself for the first)"},"brief":{"type":"object","properties":{"business":{"type":"string","minLength":1,"maxLength":120,"description":"Business or brand name, said as written"},"offer":{"type":"string","minLength":3,"maxLength":800,"description":"What is advertised: product, service, offer, price"},"cta":{"default":"","description":"Call to action (visit, call, order…)","type":"string","maxLength":200},"contact":{"default":"","description":"Phone, website or social handle, said exactly once","type":"string","maxLength":200},"audience":{"default":"","type":"string","maxLength":300},"dialect":{"type":"string","minLength":2,"maxLength":20,"description":"Dialect the spot is written and voiced in (ar-SA, ar-EG, ar for MSA, en-US…)"},"length":{"anyOf":[{"type":"number","const":6},{"type":"number","const":15},{"type":"number","const":30},{"type":"number","const":60}],"description":"Spot length in seconds: 6 (bumper), 15, 30 or 60"},"style":{"type":"string","enum":["retail","luxury","family","funny","seasonal","real-estate","food","tech"],"description":"Tone preset: energetic retail, luxury, warm family, funny, Ramadan/Eid seasonal, real estate, restaurant/food, tech/app"},"season":{"type":"string","enum":["ramadan","eid"],"description":"Seasonal greeting woven in (seasonal style)"},"voices":{"default":"single","type":"string","enum":["single","duo"],"description":"single = one narrator (tts); duo = narrator + a character (dialogue)"}},"required":["business","offer","dialect","length","style"]},"estimatedSeconds":{"type":"number"},"status":{"type":"string","enum":["draft","voicing","mixing","ready"]},"previewUrl":{"type":["string","null"]},"duration":{"type":["number","null"]}},"required":["id","createdAt","updatedAt","title","campaignId","brief","estimatedSeconds","status","previewUrl","duration"]}},"nextCursor":{"type":["string","null"]}},"required":["items","nextCursor"]},"example":{"items":[{"id":"01990000-0000-7000-8000-000000000001","createdAt":"2026-09-19T12:00:00.000Z","updatedAt":"2026-09-19T12:00:00.000Z","title":"example","campaignId":"01990000-0000-7000-8000-000000000001","brief":{"business":"example","offer":"example","cta":"","contact":"","audience":"","dialect":"ar-SA","length":6,"style":"retail","season":"ramadan","voices":"single"},"estimatedSeconds":1,"status":"draft","previewUrl":"http://localhost:4000/example","duration":"example"}],"nextCursor":"example"}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/ad-spots","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/ad-spots","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/ad-spots","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/ad-spots","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/ad-spots","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/ad-spots","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/ad-spots","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/ad-spots","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/ad-spots","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/ad-spots","traceId":"request-id"}}}}}},"post":{"operationId":"createAdSpot","tags":["Ad spots"],"summary":"Start a spot from a brief (no credits). 403 errors[0].path=adSpots without the plan switch","description":"Requires workspace role editor or above. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"X-CSRF-Token","in":"header","required":false,"description":"Required for cookie-authenticated mutations; returned by sign-in/sign-up.","schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"title":{"type":"string","maxLength":120},"brief":{"type":"object","properties":{"business":{"type":"string","minLength":1,"maxLength":120,"description":"Business or brand name, said as written"},"offer":{"type":"string","minLength":3,"maxLength":800,"description":"What is advertised: product, service, offer, price"},"cta":{"default":"","description":"Call to action (visit, call, order…)","type":"string","maxLength":200},"contact":{"default":"","description":"Phone, website or social handle, said exactly once","type":"string","maxLength":200},"audience":{"default":"","type":"string","maxLength":300},"dialect":{"type":"string","minLength":2,"maxLength":20,"description":"Dialect the spot is written and voiced in (ar-SA, ar-EG, ar for MSA, en-US…)"},"length":{"anyOf":[{"type":"number","const":6},{"type":"number","const":15},{"type":"number","const":30},{"type":"number","const":60}],"description":"Spot length in seconds: 6 (bumper), 15, 30 or 60"},"style":{"type":"string","enum":["retail","luxury","family","funny","seasonal","real-estate","food","tech"],"description":"Tone preset: energetic retail, luxury, warm family, funny, Ramadan/Eid seasonal, real estate, restaurant/food, tech/app"},"season":{"type":"string","enum":["ramadan","eid"],"description":"Seasonal greeting woven in (seasonal style)"},"voices":{"default":"single","type":"string","enum":["single","duo"],"description":"single = one narrator (tts); duo = narrator + a character (dialogue)"}},"required":["business","offer","dialect","length","style"]}},"required":["brief"]},"example":{"title":"example","brief":{"business":"example","offer":"example","cta":"","contact":"","audience":"","dialect":"ar-SA","length":6,"style":"retail","season":"ramadan","voices":"single"}}}}},"responses":{"201":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","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)$"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"},"title":{"type":"string"},"campaignId":{"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":"The first spot of the campaign (itself for the first)"},"brief":{"type":"object","properties":{"business":{"type":"string","minLength":1,"maxLength":120,"description":"Business or brand name, said as written"},"offer":{"type":"string","minLength":3,"maxLength":800,"description":"What is advertised: product, service, offer, price"},"cta":{"default":"","description":"Call to action (visit, call, order…)","type":"string","maxLength":200},"contact":{"default":"","description":"Phone, website or social handle, said exactly once","type":"string","maxLength":200},"audience":{"default":"","type":"string","maxLength":300},"dialect":{"type":"string","minLength":2,"maxLength":20,"description":"Dialect the spot is written and voiced in (ar-SA, ar-EG, ar for MSA, en-US…)"},"length":{"anyOf":[{"type":"number","const":6},{"type":"number","const":15},{"type":"number","const":30},{"type":"number","const":60}],"description":"Spot length in seconds: 6 (bumper), 15, 30 or 60"},"style":{"type":"string","enum":["retail","luxury","family","funny","seasonal","real-estate","food","tech"],"description":"Tone preset: energetic retail, luxury, warm family, funny, Ramadan/Eid seasonal, real estate, restaurant/food, tech/app"},"season":{"type":"string","enum":["ramadan","eid"],"description":"Seasonal greeting woven in (seasonal style)"},"voices":{"default":"single","type":"string","enum":["single","duo"],"description":"single = one narrator (tts); duo = narrator + a character (dialogue)"}},"required":["business","offer","dialect","length","style"]},"scripts":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"title":{"type":"string"},"angle":{"type":"string"},"lines":{"minItems":1,"maxItems":24,"type":"array","items":{"type":"object","properties":{"speaker":{"type":"string","enum":["narrator","character"]},"text":{"type":"string","minLength":1,"maxLength":800,"description":"Spoken words with inline TTS tags ([excited], [pause 0.5s]…; docs/TTS_TAGS.md)"}},"required":["speaker","text"]}},"estimatedSeconds":{"type":"number","description":"Speech estimate, tags excluded, pauses included"}},"required":["id","title","angle","lines","estimatedSeconds"]}},"scriptId":{"type":["string","null"]},"lines":{"type":"array","items":{"type":"object","properties":{"speaker":{"type":"string","enum":["narrator","character"]},"text":{"type":"string","minLength":1,"maxLength":800,"description":"Spoken words with inline TTS tags ([excited], [pause 0.5s]…; docs/TTS_TAGS.md)"}},"required":["speaker","text"]}},"estimatedSeconds":{"type":"number"},"voice":{"type":"object","properties":{"status":{"type":"string","enum":["none","pending","ready","failed"]},"generationId":{"anyOf":[{"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)$"},{"type":"null"}]},"voiceId":{"anyOf":[{"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)$"},{"type":"null"}]},"characterVoiceId":{"anyOf":[{"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)$"},{"type":"null"}]},"url":{"type":["string","null"]},"peaks":{"type":"array","items":{"type":"number"}},"duration":{"type":["number","null"]},"progress":{"type":"number"},"error":{"type":["string","null"]},"stale":{"type":"boolean","description":"The script changed after this take was made"}},"required":["status","generationId","voiceId","characterVoiceId","url","peaks","duration","progress","error","stale"]},"music":{"type":"object","properties":{"status":{"type":"string","enum":["none","pending","ready","failed"]},"source":{"type":"string","enum":["none","generated","library","upload"]},"mood":{"anyOf":[{"type":"string","enum":["upbeat","corporate","luxury","warm","quirky","oriental","khaleeji","cinematic","chill","electronic"],"description":"Music bed mood"},{"type":"null"}]},"generationId":{"anyOf":[{"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)$"},{"type":"null"}]},"uploadId":{"anyOf":[{"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)$"},{"type":"null"}]},"name":{"type":["string","null"]},"url":{"type":["string","null"]},"peaks":{"type":"array","items":{"type":"number"}},"duration":{"type":["number","null"]},"progress":{"type":"number"},"error":{"type":["string","null"]}},"required":["status","source","mood","generationId","uploadId","name","url","peaks","duration","progress","error"]},"sfx":{"type":"object","properties":{"intro":{"anyOf":[{"type":"object","properties":{"status":{"type":"string","enum":["none","pending","ready","failed"]},"stinger":{"anyOf":[{"type":"string","enum":["whoosh","whoosh-fast","sparkle","ding","tada","victory-jingle","impact","magic-shimmer","reveal-sting","drum-roll"]},{"type":"null"}]},"generationId":{"anyOf":[{"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)$"},{"type":"null"}]},"prompt":{"type":["string","null"]},"url":{"type":["string","null"]},"gainDb":{"type":"number"}},"required":["status","stinger","generationId","prompt","url","gainDb"]},{"type":"null"}]},"outro":{"anyOf":[{"type":"object","properties":{"status":{"type":"string","enum":["none","pending","ready","failed"]},"stinger":{"anyOf":[{"type":"string","enum":["whoosh","whoosh-fast","sparkle","ding","tada","victory-jingle","impact","magic-shimmer","reveal-sting","drum-roll"]},{"type":"null"}]},"generationId":{"anyOf":[{"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)$"},{"type":"null"}]},"prompt":{"type":["string","null"]},"url":{"type":["string","null"]},"gainDb":{"type":"number"}},"required":["status","stinger","generationId","prompt","url","gainDb"]},{"type":"null"}]}},"required":["intro","outro"]},"mix":{"type":"object","properties":{"status":{"type":"string","enum":["none","queued","mixing","ready","failed"]},"version":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"settings":{"type":"object","properties":{"musicDb":{"default":-4,"description":"Music level where nobody speaks (intro and button), dB against the voice","type":"number","minimum":-24,"maximum":6},"duckDb":{"default":12,"description":"How far the music dips under the voice, dB","type":"number","minimum":0,"maximum":24},"voiceStart":{"default":null,"description":"Seconds of music before the voice comes in; null = automatic for the length","anyOf":[{"type":"number","minimum":0,"maximum":8},{"type":"null"}]},"fit":{"default":true,"description":"Keep the spot exactly its length: a voice that runs long is tightened (up to 8 % faster) and the music ends on time","type":"boolean"},"preview":{"default":"social","description":"The destination the studio plays","type":"string","enum":["broadcast","broadcast-us","social","podcast"]}}},"error":{"type":["string","null"]},"stale":{"type":"boolean","description":"Tracks or settings changed after this mix"},"timeline":{"anyOf":[{"type":"object","properties":{"total":{"type":"number"},"voiceStart":{"type":"number"},"voiceEnd":{"type":"number"},"tempo":{"type":"number"},"overBy":{"type":"number","description":"Seconds past the spot length (0 when it fits)"},"duck":{"type":"array","items":{"type":"object","properties":{"start":{"type":"number"},"end":{"type":"number"}},"required":["start","end"]},"description":"Where the music dips under the voice"},"introAt":{"type":["number","null"]},"outroAt":{"type":["number","null"]},"musicFadeOut":{"type":"number"}},"required":["total","voiceStart","voiceEnd","tempo","overBy","duck","introAt","outroAt","musicFadeOut"]},{"type":"null"}]},"peaks":{"anyOf":[{"type":"object","properties":{"voice":{"type":"array","items":{"type":"number"}},"music":{"type":"array","items":{"type":"number"}},"mix":{"type":"array","items":{"type":"number"}}},"required":["voice","music","mix"]},{"type":"null"}],"description":"20 values a second over the whole spot"},"voiceOnlyUrl":{"description":"The voice alone on the same timeline and loudness (before/after)","type":["string","null"]},"outputs":{"type":"array","items":{"type":"object","properties":{"destination":{"type":"string","enum":["broadcast","broadcast-us","social","podcast"]},"lufs":{"description":"Measured integrated loudness","type":["number","null"]},"truePeak":{"description":"Measured true peak, dBTP","type":["number","null"]},"mp3":{"type":"object","properties":{"url":{"type":"string"},"downloadUrl":{"type":"string"}},"required":["url","downloadUrl"]},"wav":{"type":"object","properties":{"url":{"type":"string"},"downloadUrl":{"type":"string"}},"required":["url","downloadUrl"]}},"required":["destination","lufs","truePeak","mp3","wav"]}},"mixedAt":{"type":["string","null"]}},"required":["status","version","settings","error","stale","timeline","peaks","voiceOnlyUrl","outputs","mixedAt"]},"campaign":{"type":"array","items":{"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)$"},"length":{"anyOf":[{"type":"number","const":6},{"type":"number","const":15},{"type":"number","const":30},{"type":"number","const":60}],"description":"Spot length in seconds: 6 (bumper), 15, 30 or 60"},"title":{"type":"string"},"ready":{"type":"boolean"}},"required":["id","length","title","ready"]},"description":"Every spot of the campaign, shortest first"}},"required":["id","createdAt","updatedAt","title","campaignId","brief","scripts","scriptId","lines","estimatedSeconds","voice","music","sfx","mix","campaign"]},"example":{"id":"01990000-0000-7000-8000-000000000001","createdAt":"2026-09-19T12:00:00.000Z","updatedAt":"2026-09-19T12:00:00.000Z","title":"example","campaignId":"01990000-0000-7000-8000-000000000001","brief":{"business":"example","offer":"example","cta":"","contact":"","audience":"","dialect":"ar-SA","length":6,"style":"retail","season":"ramadan","voices":"single"},"scripts":[{"id":"example","title":"example","angle":"example","lines":[{"speaker":"narrator","text":"مرحباً بك في فوكلا."}],"estimatedSeconds":1}],"scriptId":"example","lines":[{"speaker":"narrator","text":"مرحباً بك في فوكلا."}],"estimatedSeconds":1,"voice":{"status":"none","generationId":"01990000-0000-7000-8000-000000000001","voiceId":"01990000-0000-7000-8000-000000000001","characterVoiceId":"01990000-0000-7000-8000-000000000001","url":"example","peaks":[1],"duration":"example","progress":1,"error":"example","stale":true},"music":{"status":"none","source":"none","mood":"upbeat","generationId":"01990000-0000-7000-8000-000000000001","uploadId":"01990000-0000-7000-8000-000000000001","name":"Noura","url":"example","peaks":[1],"duration":"example","progress":1,"error":"example"},"sfx":{"intro":{"status":"none","stinger":"whoosh","generationId":"01990000-0000-7000-8000-000000000001","prompt":"مرحباً بك في فوكلا.","url":"example","gainDb":1},"outro":{"status":"none","stinger":"whoosh","generationId":"01990000-0000-7000-8000-000000000001","prompt":"مرحباً بك في فوكلا.","url":"example","gainDb":1}},"mix":{"status":"none","version":-9007199254740991,"settings":{"musicDb":-4,"duckDb":12,"voiceStart":null,"fit":true,"preview":"social"},"error":"example","stale":true,"timeline":{"total":1,"voiceStart":1,"voiceEnd":1,"tempo":1,"overBy":1,"duck":[{"start":1,"end":1}],"introAt":"2026-09-19T12:00:00.000Z","outroAt":"2026-09-19T12:00:00.000Z","musicFadeOut":1},"peaks":{"voice":[1],"music":[1],"mix":[1]},"voiceOnlyUrl":"http://localhost:4000/example","outputs":[{"destination":"broadcast","lufs":"example","truePeak":"example","mp3":{"url":"example","downloadUrl":"http://localhost:4000/example"},"wav":{"url":"example","downloadUrl":"http://localhost:4000/example"}}],"mixedAt":"2026-09-19T12:00:00.000Z"},"campaign":[{"id":"01990000-0000-7000-8000-000000000001","length":6,"title":"example","ready":true}]}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/ad-spots","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/ad-spots","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/ad-spots","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/ad-spots","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/ad-spots","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/ad-spots","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/ad-spots","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/ad-spots","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/ad-spots","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/ad-spots","traceId":"request-id"}}}}}}},"/v1/ad-spots/{id}":{"get":{"operationId":"getAdSpot","tags":["Ad spots"],"summary":"The spot with its tracks, timeline, mixes per destination (MP3 and WAV, measured loudness) and the campaign","description":"Requires workspace role viewer or above. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","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)$"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"},"title":{"type":"string"},"campaignId":{"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":"The first spot of the campaign (itself for the first)"},"brief":{"type":"object","properties":{"business":{"type":"string","minLength":1,"maxLength":120,"description":"Business or brand name, said as written"},"offer":{"type":"string","minLength":3,"maxLength":800,"description":"What is advertised: product, service, offer, price"},"cta":{"default":"","description":"Call to action (visit, call, order…)","type":"string","maxLength":200},"contact":{"default":"","description":"Phone, website or social handle, said exactly once","type":"string","maxLength":200},"audience":{"default":"","type":"string","maxLength":300},"dialect":{"type":"string","minLength":2,"maxLength":20,"description":"Dialect the spot is written and voiced in (ar-SA, ar-EG, ar for MSA, en-US…)"},"length":{"anyOf":[{"type":"number","const":6},{"type":"number","const":15},{"type":"number","const":30},{"type":"number","const":60}],"description":"Spot length in seconds: 6 (bumper), 15, 30 or 60"},"style":{"type":"string","enum":["retail","luxury","family","funny","seasonal","real-estate","food","tech"],"description":"Tone preset: energetic retail, luxury, warm family, funny, Ramadan/Eid seasonal, real estate, restaurant/food, tech/app"},"season":{"type":"string","enum":["ramadan","eid"],"description":"Seasonal greeting woven in (seasonal style)"},"voices":{"default":"single","type":"string","enum":["single","duo"],"description":"single = one narrator (tts); duo = narrator + a character (dialogue)"}},"required":["business","offer","dialect","length","style"]},"scripts":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"title":{"type":"string"},"angle":{"type":"string"},"lines":{"minItems":1,"maxItems":24,"type":"array","items":{"type":"object","properties":{"speaker":{"type":"string","enum":["narrator","character"]},"text":{"type":"string","minLength":1,"maxLength":800,"description":"Spoken words with inline TTS tags ([excited], [pause 0.5s]…; docs/TTS_TAGS.md)"}},"required":["speaker","text"]}},"estimatedSeconds":{"type":"number","description":"Speech estimate, tags excluded, pauses included"}},"required":["id","title","angle","lines","estimatedSeconds"]}},"scriptId":{"type":["string","null"]},"lines":{"type":"array","items":{"type":"object","properties":{"speaker":{"type":"string","enum":["narrator","character"]},"text":{"type":"string","minLength":1,"maxLength":800,"description":"Spoken words with inline TTS tags ([excited], [pause 0.5s]…; docs/TTS_TAGS.md)"}},"required":["speaker","text"]}},"estimatedSeconds":{"type":"number"},"voice":{"type":"object","properties":{"status":{"type":"string","enum":["none","pending","ready","failed"]},"generationId":{"anyOf":[{"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)$"},{"type":"null"}]},"voiceId":{"anyOf":[{"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)$"},{"type":"null"}]},"characterVoiceId":{"anyOf":[{"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)$"},{"type":"null"}]},"url":{"type":["string","null"]},"peaks":{"type":"array","items":{"type":"number"}},"duration":{"type":["number","null"]},"progress":{"type":"number"},"error":{"type":["string","null"]},"stale":{"type":"boolean","description":"The script changed after this take was made"}},"required":["status","generationId","voiceId","characterVoiceId","url","peaks","duration","progress","error","stale"]},"music":{"type":"object","properties":{"status":{"type":"string","enum":["none","pending","ready","failed"]},"source":{"type":"string","enum":["none","generated","library","upload"]},"mood":{"anyOf":[{"type":"string","enum":["upbeat","corporate","luxury","warm","quirky","oriental","khaleeji","cinematic","chill","electronic"],"description":"Music bed mood"},{"type":"null"}]},"generationId":{"anyOf":[{"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)$"},{"type":"null"}]},"uploadId":{"anyOf":[{"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)$"},{"type":"null"}]},"name":{"type":["string","null"]},"url":{"type":["string","null"]},"peaks":{"type":"array","items":{"type":"number"}},"duration":{"type":["number","null"]},"progress":{"type":"number"},"error":{"type":["string","null"]}},"required":["status","source","mood","generationId","uploadId","name","url","peaks","duration","progress","error"]},"sfx":{"type":"object","properties":{"intro":{"anyOf":[{"type":"object","properties":{"status":{"type":"string","enum":["none","pending","ready","failed"]},"stinger":{"anyOf":[{"type":"string","enum":["whoosh","whoosh-fast","sparkle","ding","tada","victory-jingle","impact","magic-shimmer","reveal-sting","drum-roll"]},{"type":"null"}]},"generationId":{"anyOf":[{"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)$"},{"type":"null"}]},"prompt":{"type":["string","null"]},"url":{"type":["string","null"]},"gainDb":{"type":"number"}},"required":["status","stinger","generationId","prompt","url","gainDb"]},{"type":"null"}]},"outro":{"anyOf":[{"type":"object","properties":{"status":{"type":"string","enum":["none","pending","ready","failed"]},"stinger":{"anyOf":[{"type":"string","enum":["whoosh","whoosh-fast","sparkle","ding","tada","victory-jingle","impact","magic-shimmer","reveal-sting","drum-roll"]},{"type":"null"}]},"generationId":{"anyOf":[{"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)$"},{"type":"null"}]},"prompt":{"type":["string","null"]},"url":{"type":["string","null"]},"gainDb":{"type":"number"}},"required":["status","stinger","generationId","prompt","url","gainDb"]},{"type":"null"}]}},"required":["intro","outro"]},"mix":{"type":"object","properties":{"status":{"type":"string","enum":["none","queued","mixing","ready","failed"]},"version":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"settings":{"type":"object","properties":{"musicDb":{"default":-4,"description":"Music level where nobody speaks (intro and button), dB against the voice","type":"number","minimum":-24,"maximum":6},"duckDb":{"default":12,"description":"How far the music dips under the voice, dB","type":"number","minimum":0,"maximum":24},"voiceStart":{"default":null,"description":"Seconds of music before the voice comes in; null = automatic for the length","anyOf":[{"type":"number","minimum":0,"maximum":8},{"type":"null"}]},"fit":{"default":true,"description":"Keep the spot exactly its length: a voice that runs long is tightened (up to 8 % faster) and the music ends on time","type":"boolean"},"preview":{"default":"social","description":"The destination the studio plays","type":"string","enum":["broadcast","broadcast-us","social","podcast"]}}},"error":{"type":["string","null"]},"stale":{"type":"boolean","description":"Tracks or settings changed after this mix"},"timeline":{"anyOf":[{"type":"object","properties":{"total":{"type":"number"},"voiceStart":{"type":"number"},"voiceEnd":{"type":"number"},"tempo":{"type":"number"},"overBy":{"type":"number","description":"Seconds past the spot length (0 when it fits)"},"duck":{"type":"array","items":{"type":"object","properties":{"start":{"type":"number"},"end":{"type":"number"}},"required":["start","end"]},"description":"Where the music dips under the voice"},"introAt":{"type":["number","null"]},"outroAt":{"type":["number","null"]},"musicFadeOut":{"type":"number"}},"required":["total","voiceStart","voiceEnd","tempo","overBy","duck","introAt","outroAt","musicFadeOut"]},{"type":"null"}]},"peaks":{"anyOf":[{"type":"object","properties":{"voice":{"type":"array","items":{"type":"number"}},"music":{"type":"array","items":{"type":"number"}},"mix":{"type":"array","items":{"type":"number"}}},"required":["voice","music","mix"]},{"type":"null"}],"description":"20 values a second over the whole spot"},"voiceOnlyUrl":{"description":"The voice alone on the same timeline and loudness (before/after)","type":["string","null"]},"outputs":{"type":"array","items":{"type":"object","properties":{"destination":{"type":"string","enum":["broadcast","broadcast-us","social","podcast"]},"lufs":{"description":"Measured integrated loudness","type":["number","null"]},"truePeak":{"description":"Measured true peak, dBTP","type":["number","null"]},"mp3":{"type":"object","properties":{"url":{"type":"string"},"downloadUrl":{"type":"string"}},"required":["url","downloadUrl"]},"wav":{"type":"object","properties":{"url":{"type":"string"},"downloadUrl":{"type":"string"}},"required":["url","downloadUrl"]}},"required":["destination","lufs","truePeak","mp3","wav"]}},"mixedAt":{"type":["string","null"]}},"required":["status","version","settings","error","stale","timeline","peaks","voiceOnlyUrl","outputs","mixedAt"]},"campaign":{"type":"array","items":{"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)$"},"length":{"anyOf":[{"type":"number","const":6},{"type":"number","const":15},{"type":"number","const":30},{"type":"number","const":60}],"description":"Spot length in seconds: 6 (bumper), 15, 30 or 60"},"title":{"type":"string"},"ready":{"type":"boolean"}},"required":["id","length","title","ready"]},"description":"Every spot of the campaign, shortest first"}},"required":["id","createdAt","updatedAt","title","campaignId","brief","scripts","scriptId","lines","estimatedSeconds","voice","music","sfx","mix","campaign"]},"example":{"id":"01990000-0000-7000-8000-000000000001","createdAt":"2026-09-19T12:00:00.000Z","updatedAt":"2026-09-19T12:00:00.000Z","title":"example","campaignId":"01990000-0000-7000-8000-000000000001","brief":{"business":"example","offer":"example","cta":"","contact":"","audience":"","dialect":"ar-SA","length":6,"style":"retail","season":"ramadan","voices":"single"},"scripts":[{"id":"example","title":"example","angle":"example","lines":[{"speaker":"narrator","text":"مرحباً بك في فوكلا."}],"estimatedSeconds":1}],"scriptId":"example","lines":[{"speaker":"narrator","text":"مرحباً بك في فوكلا."}],"estimatedSeconds":1,"voice":{"status":"none","generationId":"01990000-0000-7000-8000-000000000001","voiceId":"01990000-0000-7000-8000-000000000001","characterVoiceId":"01990000-0000-7000-8000-000000000001","url":"example","peaks":[1],"duration":"example","progress":1,"error":"example","stale":true},"music":{"status":"none","source":"none","mood":"upbeat","generationId":"01990000-0000-7000-8000-000000000001","uploadId":"01990000-0000-7000-8000-000000000001","name":"Noura","url":"example","peaks":[1],"duration":"example","progress":1,"error":"example"},"sfx":{"intro":{"status":"none","stinger":"whoosh","generationId":"01990000-0000-7000-8000-000000000001","prompt":"مرحباً بك في فوكلا.","url":"example","gainDb":1},"outro":{"status":"none","stinger":"whoosh","generationId":"01990000-0000-7000-8000-000000000001","prompt":"مرحباً بك في فوكلا.","url":"example","gainDb":1}},"mix":{"status":"none","version":-9007199254740991,"settings":{"musicDb":-4,"duckDb":12,"voiceStart":null,"fit":true,"preview":"social"},"error":"example","stale":true,"timeline":{"total":1,"voiceStart":1,"voiceEnd":1,"tempo":1,"overBy":1,"duck":[{"start":1,"end":1}],"introAt":"2026-09-19T12:00:00.000Z","outroAt":"2026-09-19T12:00:00.000Z","musicFadeOut":1},"peaks":{"voice":[1],"music":[1],"mix":[1]},"voiceOnlyUrl":"http://localhost:4000/example","outputs":[{"destination":"broadcast","lufs":"example","truePeak":"example","mp3":{"url":"example","downloadUrl":"http://localhost:4000/example"},"wav":{"url":"example","downloadUrl":"http://localhost:4000/example"}}],"mixedAt":"2026-09-19T12:00:00.000Z"},"campaign":[{"id":"01990000-0000-7000-8000-000000000001","length":6,"title":"example","ready":true}]}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/ad-spots/{id}","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/ad-spots/{id}","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/ad-spots/{id}","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/ad-spots/{id}","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/ad-spots/{id}","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/ad-spots/{id}","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/ad-spots/{id}","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/ad-spots/{id}","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/ad-spots/{id}","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/ad-spots/{id}","traceId":"request-id"}}}}}},"patch":{"operationId":"updateAdSpot","tags":["Ad spots"],"summary":"Edit the brief, the script lines, the voices, the music source, the stingers or the mix settings (nothing is charged)","description":"Requires workspace role editor or above. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"X-CSRF-Token","in":"header","required":false,"description":"Required for cookie-authenticated mutations; returned by sign-in/sign-up.","schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"title":{"type":"string","minLength":1,"maxLength":120},"brief":{"type":"object","properties":{"business":{"type":"string","minLength":1,"maxLength":120,"description":"Business or brand name, said as written"},"offer":{"type":"string","minLength":3,"maxLength":800,"description":"What is advertised: product, service, offer, price"},"cta":{"default":"","description":"Call to action (visit, call, order…)","type":"string","maxLength":200},"contact":{"default":"","description":"Phone, website or social handle, said exactly once","type":"string","maxLength":200},"audience":{"default":"","type":"string","maxLength":300},"dialect":{"type":"string","minLength":2,"maxLength":20,"description":"Dialect the spot is written and voiced in (ar-SA, ar-EG, ar for MSA, en-US…)"},"length":{"anyOf":[{"type":"number","const":6},{"type":"number","const":15},{"type":"number","const":30},{"type":"number","const":60}],"description":"Spot length in seconds: 6 (bumper), 15, 30 or 60"},"style":{"type":"string","enum":["retail","luxury","family","funny","seasonal","real-estate","food","tech"],"description":"Tone preset: energetic retail, luxury, warm family, funny, Ramadan/Eid seasonal, real estate, restaurant/food, tech/app"},"season":{"type":"string","enum":["ramadan","eid"],"description":"Seasonal greeting woven in (seasonal style)"},"voices":{"default":"single","type":"string","enum":["single","duo"],"description":"single = one narrator (tts); duo = narrator + a character (dialogue)"}}},"lines":{"description":"The script to voice (edited inline)","minItems":1,"maxItems":24,"type":"array","items":{"type":"object","properties":{"speaker":{"type":"string","enum":["narrator","character"]},"text":{"type":"string","minLength":1,"maxLength":800,"description":"Spoken words with inline TTS tags ([excited], [pause 0.5s]…; docs/TTS_TAGS.md)"}},"required":["speaker","text"]}},"scriptId":{"description":"The variant the lines came from","type":"string","maxLength":40},"voiceId":{"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)$"},"characterVoiceId":{"anyOf":[{"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)$"},{"type":"null"}]},"music":{"description":"Use no music, a music generation of the workspace, or an uploaded track (making new music is POST …/music)","anyOf":[{"type":"object","properties":{"source":{"type":"string","const":"none"}},"required":["source"]},{"type":"object","properties":{"source":{"type":"string","const":"library"},"generationId":{"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)$"}},"required":["source","generationId"]},{"type":"object","properties":{"source":{"type":"string","const":"upload"},"uploadId":{"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)$"}},"required":["source","uploadId"]}]},"mood":{"type":"string","enum":["upbeat","corporate","luxury","warm","quirky","oriental","khaleeji","cinematic","chill","electronic"],"description":"Music bed mood"},"sfx":{"description":"Built-in stingers (stinger) or an effect made earlier (generationId); null removes it","type":"object","properties":{"intro":{"anyOf":[{"type":"object","properties":{"stinger":{"type":"string","enum":["whoosh","whoosh-fast","sparkle","ding","tada","victory-jingle","impact","magic-shimmer","reveal-sting","drum-roll"]},"generationId":{"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)$"},"prompt":{"type":"string"},"gainDb":{"default":-3,"type":"number","minimum":-24,"maximum":6}}},{"type":"null"}]},"outro":{"anyOf":[{"type":"object","properties":{"stinger":{"type":"string","enum":["whoosh","whoosh-fast","sparkle","ding","tada","victory-jingle","impact","magic-shimmer","reveal-sting","drum-roll"]},"generationId":{"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)$"},"prompt":{"type":"string"},"gainDb":{"default":-3,"type":"number","minimum":-24,"maximum":6}}},{"type":"null"}]}}},"mix":{"type":"object","properties":{"musicDb":{"default":-4,"description":"Music level where nobody speaks (intro and button), dB against the voice","type":"number","minimum":-24,"maximum":6},"duckDb":{"default":12,"description":"How far the music dips under the voice, dB","type":"number","minimum":0,"maximum":24},"voiceStart":{"default":null,"description":"Seconds of music before the voice comes in; null = automatic for the length","anyOf":[{"type":"number","minimum":0,"maximum":8},{"type":"null"}]},"fit":{"default":true,"description":"Keep the spot exactly its length: a voice that runs long is tightened (up to 8 % faster) and the music ends on time","type":"boolean"},"preview":{"default":"social","description":"The destination the studio plays","type":"string","enum":["broadcast","broadcast-us","social","podcast"]}}}}},"example":{"title":"example","brief":{"business":"example","offer":"example","cta":"","contact":"","audience":"","dialect":"ar-SA","length":6,"style":"retail","season":"ramadan","voices":"single"},"lines":[{"speaker":"narrator","text":"مرحباً بك في فوكلا."}],"scriptId":"example","voiceId":"01990000-0000-7000-8000-000000000001","characterVoiceId":"01990000-0000-7000-8000-000000000001","music":{"source":"none"},"mood":"upbeat","sfx":{"intro":{"stinger":"whoosh","generationId":"01990000-0000-7000-8000-000000000001","prompt":"مرحباً بك في فوكلا.","gainDb":-3},"outro":{"stinger":"whoosh","generationId":"01990000-0000-7000-8000-000000000001","prompt":"مرحباً بك في فوكلا.","gainDb":-3}},"mix":{"musicDb":-4,"duckDb":12,"voiceStart":null,"fit":true,"preview":"social"}}}}},"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","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)$"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"},"title":{"type":"string"},"campaignId":{"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":"The first spot of the campaign (itself for the first)"},"brief":{"type":"object","properties":{"business":{"type":"string","minLength":1,"maxLength":120,"description":"Business or brand name, said as written"},"offer":{"type":"string","minLength":3,"maxLength":800,"description":"What is advertised: product, service, offer, price"},"cta":{"default":"","description":"Call to action (visit, call, order…)","type":"string","maxLength":200},"contact":{"default":"","description":"Phone, website or social handle, said exactly once","type":"string","maxLength":200},"audience":{"default":"","type":"string","maxLength":300},"dialect":{"type":"string","minLength":2,"maxLength":20,"description":"Dialect the spot is written and voiced in (ar-SA, ar-EG, ar for MSA, en-US…)"},"length":{"anyOf":[{"type":"number","const":6},{"type":"number","const":15},{"type":"number","const":30},{"type":"number","const":60}],"description":"Spot length in seconds: 6 (bumper), 15, 30 or 60"},"style":{"type":"string","enum":["retail","luxury","family","funny","seasonal","real-estate","food","tech"],"description":"Tone preset: energetic retail, luxury, warm family, funny, Ramadan/Eid seasonal, real estate, restaurant/food, tech/app"},"season":{"type":"string","enum":["ramadan","eid"],"description":"Seasonal greeting woven in (seasonal style)"},"voices":{"default":"single","type":"string","enum":["single","duo"],"description":"single = one narrator (tts); duo = narrator + a character (dialogue)"}},"required":["business","offer","dialect","length","style"]},"scripts":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"title":{"type":"string"},"angle":{"type":"string"},"lines":{"minItems":1,"maxItems":24,"type":"array","items":{"type":"object","properties":{"speaker":{"type":"string","enum":["narrator","character"]},"text":{"type":"string","minLength":1,"maxLength":800,"description":"Spoken words with inline TTS tags ([excited], [pause 0.5s]…; docs/TTS_TAGS.md)"}},"required":["speaker","text"]}},"estimatedSeconds":{"type":"number","description":"Speech estimate, tags excluded, pauses included"}},"required":["id","title","angle","lines","estimatedSeconds"]}},"scriptId":{"type":["string","null"]},"lines":{"type":"array","items":{"type":"object","properties":{"speaker":{"type":"string","enum":["narrator","character"]},"text":{"type":"string","minLength":1,"maxLength":800,"description":"Spoken words with inline TTS tags ([excited], [pause 0.5s]…; docs/TTS_TAGS.md)"}},"required":["speaker","text"]}},"estimatedSeconds":{"type":"number"},"voice":{"type":"object","properties":{"status":{"type":"string","enum":["none","pending","ready","failed"]},"generationId":{"anyOf":[{"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)$"},{"type":"null"}]},"voiceId":{"anyOf":[{"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)$"},{"type":"null"}]},"characterVoiceId":{"anyOf":[{"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)$"},{"type":"null"}]},"url":{"type":["string","null"]},"peaks":{"type":"array","items":{"type":"number"}},"duration":{"type":["number","null"]},"progress":{"type":"number"},"error":{"type":["string","null"]},"stale":{"type":"boolean","description":"The script changed after this take was made"}},"required":["status","generationId","voiceId","characterVoiceId","url","peaks","duration","progress","error","stale"]},"music":{"type":"object","properties":{"status":{"type":"string","enum":["none","pending","ready","failed"]},"source":{"type":"string","enum":["none","generated","library","upload"]},"mood":{"anyOf":[{"type":"string","enum":["upbeat","corporate","luxury","warm","quirky","oriental","khaleeji","cinematic","chill","electronic"],"description":"Music bed mood"},{"type":"null"}]},"generationId":{"anyOf":[{"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)$"},{"type":"null"}]},"uploadId":{"anyOf":[{"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)$"},{"type":"null"}]},"name":{"type":["string","null"]},"url":{"type":["string","null"]},"peaks":{"type":"array","items":{"type":"number"}},"duration":{"type":["number","null"]},"progress":{"type":"number"},"error":{"type":["string","null"]}},"required":["status","source","mood","generationId","uploadId","name","url","peaks","duration","progress","error"]},"sfx":{"type":"object","properties":{"intro":{"anyOf":[{"type":"object","properties":{"status":{"type":"string","enum":["none","pending","ready","failed"]},"stinger":{"anyOf":[{"type":"string","enum":["whoosh","whoosh-fast","sparkle","ding","tada","victory-jingle","impact","magic-shimmer","reveal-sting","drum-roll"]},{"type":"null"}]},"generationId":{"anyOf":[{"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)$"},{"type":"null"}]},"prompt":{"type":["string","null"]},"url":{"type":["string","null"]},"gainDb":{"type":"number"}},"required":["status","stinger","generationId","prompt","url","gainDb"]},{"type":"null"}]},"outro":{"anyOf":[{"type":"object","properties":{"status":{"type":"string","enum":["none","pending","ready","failed"]},"stinger":{"anyOf":[{"type":"string","enum":["whoosh","whoosh-fast","sparkle","ding","tada","victory-jingle","impact","magic-shimmer","reveal-sting","drum-roll"]},{"type":"null"}]},"generationId":{"anyOf":[{"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)$"},{"type":"null"}]},"prompt":{"type":["string","null"]},"url":{"type":["string","null"]},"gainDb":{"type":"number"}},"required":["status","stinger","generationId","prompt","url","gainDb"]},{"type":"null"}]}},"required":["intro","outro"]},"mix":{"type":"object","properties":{"status":{"type":"string","enum":["none","queued","mixing","ready","failed"]},"version":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"settings":{"type":"object","properties":{"musicDb":{"default":-4,"description":"Music level where nobody speaks (intro and button), dB against the voice","type":"number","minimum":-24,"maximum":6},"duckDb":{"default":12,"description":"How far the music dips under the voice, dB","type":"number","minimum":0,"maximum":24},"voiceStart":{"default":null,"description":"Seconds of music before the voice comes in; null = automatic for the length","anyOf":[{"type":"number","minimum":0,"maximum":8},{"type":"null"}]},"fit":{"default":true,"description":"Keep the spot exactly its length: a voice that runs long is tightened (up to 8 % faster) and the music ends on time","type":"boolean"},"preview":{"default":"social","description":"The destination the studio plays","type":"string","enum":["broadcast","broadcast-us","social","podcast"]}}},"error":{"type":["string","null"]},"stale":{"type":"boolean","description":"Tracks or settings changed after this mix"},"timeline":{"anyOf":[{"type":"object","properties":{"total":{"type":"number"},"voiceStart":{"type":"number"},"voiceEnd":{"type":"number"},"tempo":{"type":"number"},"overBy":{"type":"number","description":"Seconds past the spot length (0 when it fits)"},"duck":{"type":"array","items":{"type":"object","properties":{"start":{"type":"number"},"end":{"type":"number"}},"required":["start","end"]},"description":"Where the music dips under the voice"},"introAt":{"type":["number","null"]},"outroAt":{"type":["number","null"]},"musicFadeOut":{"type":"number"}},"required":["total","voiceStart","voiceEnd","tempo","overBy","duck","introAt","outroAt","musicFadeOut"]},{"type":"null"}]},"peaks":{"anyOf":[{"type":"object","properties":{"voice":{"type":"array","items":{"type":"number"}},"music":{"type":"array","items":{"type":"number"}},"mix":{"type":"array","items":{"type":"number"}}},"required":["voice","music","mix"]},{"type":"null"}],"description":"20 values a second over the whole spot"},"voiceOnlyUrl":{"description":"The voice alone on the same timeline and loudness (before/after)","type":["string","null"]},"outputs":{"type":"array","items":{"type":"object","properties":{"destination":{"type":"string","enum":["broadcast","broadcast-us","social","podcast"]},"lufs":{"description":"Measured integrated loudness","type":["number","null"]},"truePeak":{"description":"Measured true peak, dBTP","type":["number","null"]},"mp3":{"type":"object","properties":{"url":{"type":"string"},"downloadUrl":{"type":"string"}},"required":["url","downloadUrl"]},"wav":{"type":"object","properties":{"url":{"type":"string"},"downloadUrl":{"type":"string"}},"required":["url","downloadUrl"]}},"required":["destination","lufs","truePeak","mp3","wav"]}},"mixedAt":{"type":["string","null"]}},"required":["status","version","settings","error","stale","timeline","peaks","voiceOnlyUrl","outputs","mixedAt"]},"campaign":{"type":"array","items":{"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)$"},"length":{"anyOf":[{"type":"number","const":6},{"type":"number","const":15},{"type":"number","const":30},{"type":"number","const":60}],"description":"Spot length in seconds: 6 (bumper), 15, 30 or 60"},"title":{"type":"string"},"ready":{"type":"boolean"}},"required":["id","length","title","ready"]},"description":"Every spot of the campaign, shortest first"}},"required":["id","createdAt","updatedAt","title","campaignId","brief","scripts","scriptId","lines","estimatedSeconds","voice","music","sfx","mix","campaign"]},"example":{"id":"01990000-0000-7000-8000-000000000001","createdAt":"2026-09-19T12:00:00.000Z","updatedAt":"2026-09-19T12:00:00.000Z","title":"example","campaignId":"01990000-0000-7000-8000-000000000001","brief":{"business":"example","offer":"example","cta":"","contact":"","audience":"","dialect":"ar-SA","length":6,"style":"retail","season":"ramadan","voices":"single"},"scripts":[{"id":"example","title":"example","angle":"example","lines":[{"speaker":"narrator","text":"مرحباً بك في فوكلا."}],"estimatedSeconds":1}],"scriptId":"example","lines":[{"speaker":"narrator","text":"مرحباً بك في فوكلا."}],"estimatedSeconds":1,"voice":{"status":"none","generationId":"01990000-0000-7000-8000-000000000001","voiceId":"01990000-0000-7000-8000-000000000001","characterVoiceId":"01990000-0000-7000-8000-000000000001","url":"example","peaks":[1],"duration":"example","progress":1,"error":"example","stale":true},"music":{"status":"none","source":"none","mood":"upbeat","generationId":"01990000-0000-7000-8000-000000000001","uploadId":"01990000-0000-7000-8000-000000000001","name":"Noura","url":"example","peaks":[1],"duration":"example","progress":1,"error":"example"},"sfx":{"intro":{"status":"none","stinger":"whoosh","generationId":"01990000-0000-7000-8000-000000000001","prompt":"مرحباً بك في فوكلا.","url":"example","gainDb":1},"outro":{"status":"none","stinger":"whoosh","generationId":"01990000-0000-7000-8000-000000000001","prompt":"مرحباً بك في فوكلا.","url":"example","gainDb":1}},"mix":{"status":"none","version":-9007199254740991,"settings":{"musicDb":-4,"duckDb":12,"voiceStart":null,"fit":true,"preview":"social"},"error":"example","stale":true,"timeline":{"total":1,"voiceStart":1,"voiceEnd":1,"tempo":1,"overBy":1,"duck":[{"start":1,"end":1}],"introAt":"2026-09-19T12:00:00.000Z","outroAt":"2026-09-19T12:00:00.000Z","musicFadeOut":1},"peaks":{"voice":[1],"music":[1],"mix":[1]},"voiceOnlyUrl":"http://localhost:4000/example","outputs":[{"destination":"broadcast","lufs":"example","truePeak":"example","mp3":{"url":"example","downloadUrl":"http://localhost:4000/example"},"wav":{"url":"example","downloadUrl":"http://localhost:4000/example"}}],"mixedAt":"2026-09-19T12:00:00.000Z"},"campaign":[{"id":"01990000-0000-7000-8000-000000000001","length":6,"title":"example","ready":true}]}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/ad-spots/{id}","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/ad-spots/{id}","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/ad-spots/{id}","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/ad-spots/{id}","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/ad-spots/{id}","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/ad-spots/{id}","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/ad-spots/{id}","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/ad-spots/{id}","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/ad-spots/{id}","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/ad-spots/{id}","traceId":"request-id"}}}}}},"delete":{"operationId":"deleteAdSpot","tags":["Ad spots"],"summary":"Delete the spot and its mixes; its voice, music and effects stay in the Library","description":"Requires workspace role editor or above. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"X-CSRF-Token","in":"header","required":false,"description":"Required for cookie-authenticated mutations; returned by sign-in/sign-up.","schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"ok":{"type":"boolean"}},"required":["ok"]},"example":{"ok":true}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/ad-spots/{id}","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/ad-spots/{id}","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/ad-spots/{id}","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/ad-spots/{id}","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/ad-spots/{id}","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/ad-spots/{id}","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/ad-spots/{id}","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/ad-spots/{id}","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/ad-spots/{id}","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/ad-spots/{id}","traceId":"request-id"}}}}}}},"/v1/ad-spots/{id}/scripts":{"post":{"operationId":"writeAdSpotScripts","tags":["Ad spots"],"summary":"AI writes 1–3 script variants for the brief, sized to the length (free)","description":"Requires workspace role editor or above. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"X-CSRF-Token","in":"header","required":false,"description":"Required for cookie-authenticated mutations; returned by sign-in/sign-up.","schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"direction":{"description":"Extra direction for the writer (\"mention free delivery\", \"more humour\")","type":"string","maxLength":400},"count":{"default":3,"type":"integer","minimum":1,"maximum":3}}},"example":{"direction":"example","count":3}}}},"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","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)$"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"},"title":{"type":"string"},"campaignId":{"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":"The first spot of the campaign (itself for the first)"},"brief":{"type":"object","properties":{"business":{"type":"string","minLength":1,"maxLength":120,"description":"Business or brand name, said as written"},"offer":{"type":"string","minLength":3,"maxLength":800,"description":"What is advertised: product, service, offer, price"},"cta":{"default":"","description":"Call to action (visit, call, order…)","type":"string","maxLength":200},"contact":{"default":"","description":"Phone, website or social handle, said exactly once","type":"string","maxLength":200},"audience":{"default":"","type":"string","maxLength":300},"dialect":{"type":"string","minLength":2,"maxLength":20,"description":"Dialect the spot is written and voiced in (ar-SA, ar-EG, ar for MSA, en-US…)"},"length":{"anyOf":[{"type":"number","const":6},{"type":"number","const":15},{"type":"number","const":30},{"type":"number","const":60}],"description":"Spot length in seconds: 6 (bumper), 15, 30 or 60"},"style":{"type":"string","enum":["retail","luxury","family","funny","seasonal","real-estate","food","tech"],"description":"Tone preset: energetic retail, luxury, warm family, funny, Ramadan/Eid seasonal, real estate, restaurant/food, tech/app"},"season":{"type":"string","enum":["ramadan","eid"],"description":"Seasonal greeting woven in (seasonal style)"},"voices":{"default":"single","type":"string","enum":["single","duo"],"description":"single = one narrator (tts); duo = narrator + a character (dialogue)"}},"required":["business","offer","dialect","length","style"]},"scripts":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"title":{"type":"string"},"angle":{"type":"string"},"lines":{"minItems":1,"maxItems":24,"type":"array","items":{"type":"object","properties":{"speaker":{"type":"string","enum":["narrator","character"]},"text":{"type":"string","minLength":1,"maxLength":800,"description":"Spoken words with inline TTS tags ([excited], [pause 0.5s]…; docs/TTS_TAGS.md)"}},"required":["speaker","text"]}},"estimatedSeconds":{"type":"number","description":"Speech estimate, tags excluded, pauses included"}},"required":["id","title","angle","lines","estimatedSeconds"]}},"scriptId":{"type":["string","null"]},"lines":{"type":"array","items":{"type":"object","properties":{"speaker":{"type":"string","enum":["narrator","character"]},"text":{"type":"string","minLength":1,"maxLength":800,"description":"Spoken words with inline TTS tags ([excited], [pause 0.5s]…; docs/TTS_TAGS.md)"}},"required":["speaker","text"]}},"estimatedSeconds":{"type":"number"},"voice":{"type":"object","properties":{"status":{"type":"string","enum":["none","pending","ready","failed"]},"generationId":{"anyOf":[{"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)$"},{"type":"null"}]},"voiceId":{"anyOf":[{"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)$"},{"type":"null"}]},"characterVoiceId":{"anyOf":[{"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)$"},{"type":"null"}]},"url":{"type":["string","null"]},"peaks":{"type":"array","items":{"type":"number"}},"duration":{"type":["number","null"]},"progress":{"type":"number"},"error":{"type":["string","null"]},"stale":{"type":"boolean","description":"The script changed after this take was made"}},"required":["status","generationId","voiceId","characterVoiceId","url","peaks","duration","progress","error","stale"]},"music":{"type":"object","properties":{"status":{"type":"string","enum":["none","pending","ready","failed"]},"source":{"type":"string","enum":["none","generated","library","upload"]},"mood":{"anyOf":[{"type":"string","enum":["upbeat","corporate","luxury","warm","quirky","oriental","khaleeji","cinematic","chill","electronic"],"description":"Music bed mood"},{"type":"null"}]},"generationId":{"anyOf":[{"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)$"},{"type":"null"}]},"uploadId":{"anyOf":[{"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)$"},{"type":"null"}]},"name":{"type":["string","null"]},"url":{"type":["string","null"]},"peaks":{"type":"array","items":{"type":"number"}},"duration":{"type":["number","null"]},"progress":{"type":"number"},"error":{"type":["string","null"]}},"required":["status","source","mood","generationId","uploadId","name","url","peaks","duration","progress","error"]},"sfx":{"type":"object","properties":{"intro":{"anyOf":[{"type":"object","properties":{"status":{"type":"string","enum":["none","pending","ready","failed"]},"stinger":{"anyOf":[{"type":"string","enum":["whoosh","whoosh-fast","sparkle","ding","tada","victory-jingle","impact","magic-shimmer","reveal-sting","drum-roll"]},{"type":"null"}]},"generationId":{"anyOf":[{"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)$"},{"type":"null"}]},"prompt":{"type":["string","null"]},"url":{"type":["string","null"]},"gainDb":{"type":"number"}},"required":["status","stinger","generationId","prompt","url","gainDb"]},{"type":"null"}]},"outro":{"anyOf":[{"type":"object","properties":{"status":{"type":"string","enum":["none","pending","ready","failed"]},"stinger":{"anyOf":[{"type":"string","enum":["whoosh","whoosh-fast","sparkle","ding","tada","victory-jingle","impact","magic-shimmer","reveal-sting","drum-roll"]},{"type":"null"}]},"generationId":{"anyOf":[{"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)$"},{"type":"null"}]},"prompt":{"type":["string","null"]},"url":{"type":["string","null"]},"gainDb":{"type":"number"}},"required":["status","stinger","generationId","prompt","url","gainDb"]},{"type":"null"}]}},"required":["intro","outro"]},"mix":{"type":"object","properties":{"status":{"type":"string","enum":["none","queued","mixing","ready","failed"]},"version":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"settings":{"type":"object","properties":{"musicDb":{"default":-4,"description":"Music level where nobody speaks (intro and button), dB against the voice","type":"number","minimum":-24,"maximum":6},"duckDb":{"default":12,"description":"How far the music dips under the voice, dB","type":"number","minimum":0,"maximum":24},"voiceStart":{"default":null,"description":"Seconds of music before the voice comes in; null = automatic for the length","anyOf":[{"type":"number","minimum":0,"maximum":8},{"type":"null"}]},"fit":{"default":true,"description":"Keep the spot exactly its length: a voice that runs long is tightened (up to 8 % faster) and the music ends on time","type":"boolean"},"preview":{"default":"social","description":"The destination the studio plays","type":"string","enum":["broadcast","broadcast-us","social","podcast"]}}},"error":{"type":["string","null"]},"stale":{"type":"boolean","description":"Tracks or settings changed after this mix"},"timeline":{"anyOf":[{"type":"object","properties":{"total":{"type":"number"},"voiceStart":{"type":"number"},"voiceEnd":{"type":"number"},"tempo":{"type":"number"},"overBy":{"type":"number","description":"Seconds past the spot length (0 when it fits)"},"duck":{"type":"array","items":{"type":"object","properties":{"start":{"type":"number"},"end":{"type":"number"}},"required":["start","end"]},"description":"Where the music dips under the voice"},"introAt":{"type":["number","null"]},"outroAt":{"type":["number","null"]},"musicFadeOut":{"type":"number"}},"required":["total","voiceStart","voiceEnd","tempo","overBy","duck","introAt","outroAt","musicFadeOut"]},{"type":"null"}]},"peaks":{"anyOf":[{"type":"object","properties":{"voice":{"type":"array","items":{"type":"number"}},"music":{"type":"array","items":{"type":"number"}},"mix":{"type":"array","items":{"type":"number"}}},"required":["voice","music","mix"]},{"type":"null"}],"description":"20 values a second over the whole spot"},"voiceOnlyUrl":{"description":"The voice alone on the same timeline and loudness (before/after)","type":["string","null"]},"outputs":{"type":"array","items":{"type":"object","properties":{"destination":{"type":"string","enum":["broadcast","broadcast-us","social","podcast"]},"lufs":{"description":"Measured integrated loudness","type":["number","null"]},"truePeak":{"description":"Measured true peak, dBTP","type":["number","null"]},"mp3":{"type":"object","properties":{"url":{"type":"string"},"downloadUrl":{"type":"string"}},"required":["url","downloadUrl"]},"wav":{"type":"object","properties":{"url":{"type":"string"},"downloadUrl":{"type":"string"}},"required":["url","downloadUrl"]}},"required":["destination","lufs","truePeak","mp3","wav"]}},"mixedAt":{"type":["string","null"]}},"required":["status","version","settings","error","stale","timeline","peaks","voiceOnlyUrl","outputs","mixedAt"]},"campaign":{"type":"array","items":{"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)$"},"length":{"anyOf":[{"type":"number","const":6},{"type":"number","const":15},{"type":"number","const":30},{"type":"number","const":60}],"description":"Spot length in seconds: 6 (bumper), 15, 30 or 60"},"title":{"type":"string"},"ready":{"type":"boolean"}},"required":["id","length","title","ready"]},"description":"Every spot of the campaign, shortest first"}},"required":["id","createdAt","updatedAt","title","campaignId","brief","scripts","scriptId","lines","estimatedSeconds","voice","music","sfx","mix","campaign"]},"example":{"id":"01990000-0000-7000-8000-000000000001","createdAt":"2026-09-19T12:00:00.000Z","updatedAt":"2026-09-19T12:00:00.000Z","title":"example","campaignId":"01990000-0000-7000-8000-000000000001","brief":{"business":"example","offer":"example","cta":"","contact":"","audience":"","dialect":"ar-SA","length":6,"style":"retail","season":"ramadan","voices":"single"},"scripts":[{"id":"example","title":"example","angle":"example","lines":[{"speaker":"narrator","text":"مرحباً بك في فوكلا."}],"estimatedSeconds":1}],"scriptId":"example","lines":[{"speaker":"narrator","text":"مرحباً بك في فوكلا."}],"estimatedSeconds":1,"voice":{"status":"none","generationId":"01990000-0000-7000-8000-000000000001","voiceId":"01990000-0000-7000-8000-000000000001","characterVoiceId":"01990000-0000-7000-8000-000000000001","url":"example","peaks":[1],"duration":"example","progress":1,"error":"example","stale":true},"music":{"status":"none","source":"none","mood":"upbeat","generationId":"01990000-0000-7000-8000-000000000001","uploadId":"01990000-0000-7000-8000-000000000001","name":"Noura","url":"example","peaks":[1],"duration":"example","progress":1,"error":"example"},"sfx":{"intro":{"status":"none","stinger":"whoosh","generationId":"01990000-0000-7000-8000-000000000001","prompt":"مرحباً بك في فوكلا.","url":"example","gainDb":1},"outro":{"status":"none","stinger":"whoosh","generationId":"01990000-0000-7000-8000-000000000001","prompt":"مرحباً بك في فوكلا.","url":"example","gainDb":1}},"mix":{"status":"none","version":-9007199254740991,"settings":{"musicDb":-4,"duckDb":12,"voiceStart":null,"fit":true,"preview":"social"},"error":"example","stale":true,"timeline":{"total":1,"voiceStart":1,"voiceEnd":1,"tempo":1,"overBy":1,"duck":[{"start":1,"end":1}],"introAt":"2026-09-19T12:00:00.000Z","outroAt":"2026-09-19T12:00:00.000Z","musicFadeOut":1},"peaks":{"voice":[1],"music":[1],"mix":[1]},"voiceOnlyUrl":"http://localhost:4000/example","outputs":[{"destination":"broadcast","lufs":"example","truePeak":"example","mp3":{"url":"example","downloadUrl":"http://localhost:4000/example"},"wav":{"url":"example","downloadUrl":"http://localhost:4000/example"}}],"mixedAt":"2026-09-19T12:00:00.000Z"},"campaign":[{"id":"01990000-0000-7000-8000-000000000001","length":6,"title":"example","ready":true}]}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/ad-spots/{id}/scripts","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/ad-spots/{id}/scripts","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/ad-spots/{id}/scripts","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/ad-spots/{id}/scripts","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/ad-spots/{id}/scripts","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/ad-spots/{id}/scripts","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/ad-spots/{id}/scripts","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/ad-spots/{id}/scripts","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/ad-spots/{id}/scripts","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/ad-spots/{id}/scripts","traceId":"request-id"}}}}}}},"/v1/ad-spots/{id}/voice":{"post":{"operationId":"voiceAdSpot","tags":["Ad spots"],"summary":"Voice the script: a tts generation (one voice) or a dialogue generation (narrator + character), credits as in the studios. Requires an Idempotency-Key header","description":"Requires workspace role editor or above. Retry with the same Idempotency-Key and identical body. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"Idempotency-Key","in":"header","required":true,"schema":{"type":"string","maxLength":200},"example":"request-2026-001"},{"name":"X-CSRF-Token","in":"header","required":false,"description":"Required for cookie-authenticated mutations; returned by sign-in/sign-up.","schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"productModelId":{"description":"Speech model; default the editor default","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)$"}}},"example":{"productModelId":"01990000-0000-7000-8000-000000000001"}}}},"responses":{"202":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","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)$"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"},"title":{"type":"string"},"campaignId":{"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":"The first spot of the campaign (itself for the first)"},"brief":{"type":"object","properties":{"business":{"type":"string","minLength":1,"maxLength":120,"description":"Business or brand name, said as written"},"offer":{"type":"string","minLength":3,"maxLength":800,"description":"What is advertised: product, service, offer, price"},"cta":{"default":"","description":"Call to action (visit, call, order…)","type":"string","maxLength":200},"contact":{"default":"","description":"Phone, website or social handle, said exactly once","type":"string","maxLength":200},"audience":{"default":"","type":"string","maxLength":300},"dialect":{"type":"string","minLength":2,"maxLength":20,"description":"Dialect the spot is written and voiced in (ar-SA, ar-EG, ar for MSA, en-US…)"},"length":{"anyOf":[{"type":"number","const":6},{"type":"number","const":15},{"type":"number","const":30},{"type":"number","const":60}],"description":"Spot length in seconds: 6 (bumper), 15, 30 or 60"},"style":{"type":"string","enum":["retail","luxury","family","funny","seasonal","real-estate","food","tech"],"description":"Tone preset: energetic retail, luxury, warm family, funny, Ramadan/Eid seasonal, real estate, restaurant/food, tech/app"},"season":{"type":"string","enum":["ramadan","eid"],"description":"Seasonal greeting woven in (seasonal style)"},"voices":{"default":"single","type":"string","enum":["single","duo"],"description":"single = one narrator (tts); duo = narrator + a character (dialogue)"}},"required":["business","offer","dialect","length","style"]},"scripts":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"title":{"type":"string"},"angle":{"type":"string"},"lines":{"minItems":1,"maxItems":24,"type":"array","items":{"type":"object","properties":{"speaker":{"type":"string","enum":["narrator","character"]},"text":{"type":"string","minLength":1,"maxLength":800,"description":"Spoken words with inline TTS tags ([excited], [pause 0.5s]…; docs/TTS_TAGS.md)"}},"required":["speaker","text"]}},"estimatedSeconds":{"type":"number","description":"Speech estimate, tags excluded, pauses included"}},"required":["id","title","angle","lines","estimatedSeconds"]}},"scriptId":{"type":["string","null"]},"lines":{"type":"array","items":{"type":"object","properties":{"speaker":{"type":"string","enum":["narrator","character"]},"text":{"type":"string","minLength":1,"maxLength":800,"description":"Spoken words with inline TTS tags ([excited], [pause 0.5s]…; docs/TTS_TAGS.md)"}},"required":["speaker","text"]}},"estimatedSeconds":{"type":"number"},"voice":{"type":"object","properties":{"status":{"type":"string","enum":["none","pending","ready","failed"]},"generationId":{"anyOf":[{"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)$"},{"type":"null"}]},"voiceId":{"anyOf":[{"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)$"},{"type":"null"}]},"characterVoiceId":{"anyOf":[{"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)$"},{"type":"null"}]},"url":{"type":["string","null"]},"peaks":{"type":"array","items":{"type":"number"}},"duration":{"type":["number","null"]},"progress":{"type":"number"},"error":{"type":["string","null"]},"stale":{"type":"boolean","description":"The script changed after this take was made"}},"required":["status","generationId","voiceId","characterVoiceId","url","peaks","duration","progress","error","stale"]},"music":{"type":"object","properties":{"status":{"type":"string","enum":["none","pending","ready","failed"]},"source":{"type":"string","enum":["none","generated","library","upload"]},"mood":{"anyOf":[{"type":"string","enum":["upbeat","corporate","luxury","warm","quirky","oriental","khaleeji","cinematic","chill","electronic"],"description":"Music bed mood"},{"type":"null"}]},"generationId":{"anyOf":[{"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)$"},{"type":"null"}]},"uploadId":{"anyOf":[{"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)$"},{"type":"null"}]},"name":{"type":["string","null"]},"url":{"type":["string","null"]},"peaks":{"type":"array","items":{"type":"number"}},"duration":{"type":["number","null"]},"progress":{"type":"number"},"error":{"type":["string","null"]}},"required":["status","source","mood","generationId","uploadId","name","url","peaks","duration","progress","error"]},"sfx":{"type":"object","properties":{"intro":{"anyOf":[{"type":"object","properties":{"status":{"type":"string","enum":["none","pending","ready","failed"]},"stinger":{"anyOf":[{"type":"string","enum":["whoosh","whoosh-fast","sparkle","ding","tada","victory-jingle","impact","magic-shimmer","reveal-sting","drum-roll"]},{"type":"null"}]},"generationId":{"anyOf":[{"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)$"},{"type":"null"}]},"prompt":{"type":["string","null"]},"url":{"type":["string","null"]},"gainDb":{"type":"number"}},"required":["status","stinger","generationId","prompt","url","gainDb"]},{"type":"null"}]},"outro":{"anyOf":[{"type":"object","properties":{"status":{"type":"string","enum":["none","pending","ready","failed"]},"stinger":{"anyOf":[{"type":"string","enum":["whoosh","whoosh-fast","sparkle","ding","tada","victory-jingle","impact","magic-shimmer","reveal-sting","drum-roll"]},{"type":"null"}]},"generationId":{"anyOf":[{"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)$"},{"type":"null"}]},"prompt":{"type":["string","null"]},"url":{"type":["string","null"]},"gainDb":{"type":"number"}},"required":["status","stinger","generationId","prompt","url","gainDb"]},{"type":"null"}]}},"required":["intro","outro"]},"mix":{"type":"object","properties":{"status":{"type":"string","enum":["none","queued","mixing","ready","failed"]},"version":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"settings":{"type":"object","properties":{"musicDb":{"default":-4,"description":"Music level where nobody speaks (intro and button), dB against the voice","type":"number","minimum":-24,"maximum":6},"duckDb":{"default":12,"description":"How far the music dips under the voice, dB","type":"number","minimum":0,"maximum":24},"voiceStart":{"default":null,"description":"Seconds of music before the voice comes in; null = automatic for the length","anyOf":[{"type":"number","minimum":0,"maximum":8},{"type":"null"}]},"fit":{"default":true,"description":"Keep the spot exactly its length: a voice that runs long is tightened (up to 8 % faster) and the music ends on time","type":"boolean"},"preview":{"default":"social","description":"The destination the studio plays","type":"string","enum":["broadcast","broadcast-us","social","podcast"]}}},"error":{"type":["string","null"]},"stale":{"type":"boolean","description":"Tracks or settings changed after this mix"},"timeline":{"anyOf":[{"type":"object","properties":{"total":{"type":"number"},"voiceStart":{"type":"number"},"voiceEnd":{"type":"number"},"tempo":{"type":"number"},"overBy":{"type":"number","description":"Seconds past the spot length (0 when it fits)"},"duck":{"type":"array","items":{"type":"object","properties":{"start":{"type":"number"},"end":{"type":"number"}},"required":["start","end"]},"description":"Where the music dips under the voice"},"introAt":{"type":["number","null"]},"outroAt":{"type":["number","null"]},"musicFadeOut":{"type":"number"}},"required":["total","voiceStart","voiceEnd","tempo","overBy","duck","introAt","outroAt","musicFadeOut"]},{"type":"null"}]},"peaks":{"anyOf":[{"type":"object","properties":{"voice":{"type":"array","items":{"type":"number"}},"music":{"type":"array","items":{"type":"number"}},"mix":{"type":"array","items":{"type":"number"}}},"required":["voice","music","mix"]},{"type":"null"}],"description":"20 values a second over the whole spot"},"voiceOnlyUrl":{"description":"The voice alone on the same timeline and loudness (before/after)","type":["string","null"]},"outputs":{"type":"array","items":{"type":"object","properties":{"destination":{"type":"string","enum":["broadcast","broadcast-us","social","podcast"]},"lufs":{"description":"Measured integrated loudness","type":["number","null"]},"truePeak":{"description":"Measured true peak, dBTP","type":["number","null"]},"mp3":{"type":"object","properties":{"url":{"type":"string"},"downloadUrl":{"type":"string"}},"required":["url","downloadUrl"]},"wav":{"type":"object","properties":{"url":{"type":"string"},"downloadUrl":{"type":"string"}},"required":["url","downloadUrl"]}},"required":["destination","lufs","truePeak","mp3","wav"]}},"mixedAt":{"type":["string","null"]}},"required":["status","version","settings","error","stale","timeline","peaks","voiceOnlyUrl","outputs","mixedAt"]},"campaign":{"type":"array","items":{"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)$"},"length":{"anyOf":[{"type":"number","const":6},{"type":"number","const":15},{"type":"number","const":30},{"type":"number","const":60}],"description":"Spot length in seconds: 6 (bumper), 15, 30 or 60"},"title":{"type":"string"},"ready":{"type":"boolean"}},"required":["id","length","title","ready"]},"description":"Every spot of the campaign, shortest first"}},"required":["id","createdAt","updatedAt","title","campaignId","brief","scripts","scriptId","lines","estimatedSeconds","voice","music","sfx","mix","campaign"]},"example":{"id":"01990000-0000-7000-8000-000000000001","createdAt":"2026-09-19T12:00:00.000Z","updatedAt":"2026-09-19T12:00:00.000Z","title":"example","campaignId":"01990000-0000-7000-8000-000000000001","brief":{"business":"example","offer":"example","cta":"","contact":"","audience":"","dialect":"ar-SA","length":6,"style":"retail","season":"ramadan","voices":"single"},"scripts":[{"id":"example","title":"example","angle":"example","lines":[{"speaker":"narrator","text":"مرحباً بك في فوكلا."}],"estimatedSeconds":1}],"scriptId":"example","lines":[{"speaker":"narrator","text":"مرحباً بك في فوكلا."}],"estimatedSeconds":1,"voice":{"status":"none","generationId":"01990000-0000-7000-8000-000000000001","voiceId":"01990000-0000-7000-8000-000000000001","characterVoiceId":"01990000-0000-7000-8000-000000000001","url":"example","peaks":[1],"duration":"example","progress":1,"error":"example","stale":true},"music":{"status":"none","source":"none","mood":"upbeat","generationId":"01990000-0000-7000-8000-000000000001","uploadId":"01990000-0000-7000-8000-000000000001","name":"Noura","url":"example","peaks":[1],"duration":"example","progress":1,"error":"example"},"sfx":{"intro":{"status":"none","stinger":"whoosh","generationId":"01990000-0000-7000-8000-000000000001","prompt":"مرحباً بك في فوكلا.","url":"example","gainDb":1},"outro":{"status":"none","stinger":"whoosh","generationId":"01990000-0000-7000-8000-000000000001","prompt":"مرحباً بك في فوكلا.","url":"example","gainDb":1}},"mix":{"status":"none","version":-9007199254740991,"settings":{"musicDb":-4,"duckDb":12,"voiceStart":null,"fit":true,"preview":"social"},"error":"example","stale":true,"timeline":{"total":1,"voiceStart":1,"voiceEnd":1,"tempo":1,"overBy":1,"duck":[{"start":1,"end":1}],"introAt":"2026-09-19T12:00:00.000Z","outroAt":"2026-09-19T12:00:00.000Z","musicFadeOut":1},"peaks":{"voice":[1],"music":[1],"mix":[1]},"voiceOnlyUrl":"http://localhost:4000/example","outputs":[{"destination":"broadcast","lufs":"example","truePeak":"example","mp3":{"url":"example","downloadUrl":"http://localhost:4000/example"},"wav":{"url":"example","downloadUrl":"http://localhost:4000/example"}}],"mixedAt":"2026-09-19T12:00:00.000Z"},"campaign":[{"id":"01990000-0000-7000-8000-000000000001","length":6,"title":"example","ready":true}]}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/ad-spots/{id}/voice","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/ad-spots/{id}/voice","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/ad-spots/{id}/voice","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/ad-spots/{id}/voice","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/ad-spots/{id}/voice","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/ad-spots/{id}/voice","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/ad-spots/{id}/voice","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/ad-spots/{id}/voice","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/ad-spots/{id}/voice","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/ad-spots/{id}/voice","traceId":"request-id"}}}}}}},"/v1/ad-spots/{id}/music":{"post":{"operationId":"composeAdSpotMusic","tags":["Ad spots"],"summary":"Make an instrumental bed in a mood (a music generation; the plan must include music). Requires an Idempotency-Key header","description":"Requires workspace role editor or above. Retry with the same Idempotency-Key and identical body. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"Idempotency-Key","in":"header","required":true,"schema":{"type":"string","maxLength":200},"example":"request-2026-001"},{"name":"X-CSRF-Token","in":"header","required":false,"description":"Required for cookie-authenticated mutations; returned by sign-in/sign-up.","schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"mood":{"type":"string","enum":["upbeat","corporate","luxury","warm","quirky","oriental","khaleeji","cinematic","chill","electronic"],"description":"Music bed mood"},"productModelId":{"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)$"}},"required":["mood"]},"example":{"mood":"upbeat","productModelId":"01990000-0000-7000-8000-000000000001"}}}},"responses":{"202":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","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)$"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"},"title":{"type":"string"},"campaignId":{"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":"The first spot of the campaign (itself for the first)"},"brief":{"type":"object","properties":{"business":{"type":"string","minLength":1,"maxLength":120,"description":"Business or brand name, said as written"},"offer":{"type":"string","minLength":3,"maxLength":800,"description":"What is advertised: product, service, offer, price"},"cta":{"default":"","description":"Call to action (visit, call, order…)","type":"string","maxLength":200},"contact":{"default":"","description":"Phone, website or social handle, said exactly once","type":"string","maxLength":200},"audience":{"default":"","type":"string","maxLength":300},"dialect":{"type":"string","minLength":2,"maxLength":20,"description":"Dialect the spot is written and voiced in (ar-SA, ar-EG, ar for MSA, en-US…)"},"length":{"anyOf":[{"type":"number","const":6},{"type":"number","const":15},{"type":"number","const":30},{"type":"number","const":60}],"description":"Spot length in seconds: 6 (bumper), 15, 30 or 60"},"style":{"type":"string","enum":["retail","luxury","family","funny","seasonal","real-estate","food","tech"],"description":"Tone preset: energetic retail, luxury, warm family, funny, Ramadan/Eid seasonal, real estate, restaurant/food, tech/app"},"season":{"type":"string","enum":["ramadan","eid"],"description":"Seasonal greeting woven in (seasonal style)"},"voices":{"default":"single","type":"string","enum":["single","duo"],"description":"single = one narrator (tts); duo = narrator + a character (dialogue)"}},"required":["business","offer","dialect","length","style"]},"scripts":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"title":{"type":"string"},"angle":{"type":"string"},"lines":{"minItems":1,"maxItems":24,"type":"array","items":{"type":"object","properties":{"speaker":{"type":"string","enum":["narrator","character"]},"text":{"type":"string","minLength":1,"maxLength":800,"description":"Spoken words with inline TTS tags ([excited], [pause 0.5s]…; docs/TTS_TAGS.md)"}},"required":["speaker","text"]}},"estimatedSeconds":{"type":"number","description":"Speech estimate, tags excluded, pauses included"}},"required":["id","title","angle","lines","estimatedSeconds"]}},"scriptId":{"type":["string","null"]},"lines":{"type":"array","items":{"type":"object","properties":{"speaker":{"type":"string","enum":["narrator","character"]},"text":{"type":"string","minLength":1,"maxLength":800,"description":"Spoken words with inline TTS tags ([excited], [pause 0.5s]…; docs/TTS_TAGS.md)"}},"required":["speaker","text"]}},"estimatedSeconds":{"type":"number"},"voice":{"type":"object","properties":{"status":{"type":"string","enum":["none","pending","ready","failed"]},"generationId":{"anyOf":[{"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)$"},{"type":"null"}]},"voiceId":{"anyOf":[{"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)$"},{"type":"null"}]},"characterVoiceId":{"anyOf":[{"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)$"},{"type":"null"}]},"url":{"type":["string","null"]},"peaks":{"type":"array","items":{"type":"number"}},"duration":{"type":["number","null"]},"progress":{"type":"number"},"error":{"type":["string","null"]},"stale":{"type":"boolean","description":"The script changed after this take was made"}},"required":["status","generationId","voiceId","characterVoiceId","url","peaks","duration","progress","error","stale"]},"music":{"type":"object","properties":{"status":{"type":"string","enum":["none","pending","ready","failed"]},"source":{"type":"string","enum":["none","generated","library","upload"]},"mood":{"anyOf":[{"type":"string","enum":["upbeat","corporate","luxury","warm","quirky","oriental","khaleeji","cinematic","chill","electronic"],"description":"Music bed mood"},{"type":"null"}]},"generationId":{"anyOf":[{"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)$"},{"type":"null"}]},"uploadId":{"anyOf":[{"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)$"},{"type":"null"}]},"name":{"type":["string","null"]},"url":{"type":["string","null"]},"peaks":{"type":"array","items":{"type":"number"}},"duration":{"type":["number","null"]},"progress":{"type":"number"},"error":{"type":["string","null"]}},"required":["status","source","mood","generationId","uploadId","name","url","peaks","duration","progress","error"]},"sfx":{"type":"object","properties":{"intro":{"anyOf":[{"type":"object","properties":{"status":{"type":"string","enum":["none","pending","ready","failed"]},"stinger":{"anyOf":[{"type":"string","enum":["whoosh","whoosh-fast","sparkle","ding","tada","victory-jingle","impact","magic-shimmer","reveal-sting","drum-roll"]},{"type":"null"}]},"generationId":{"anyOf":[{"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)$"},{"type":"null"}]},"prompt":{"type":["string","null"]},"url":{"type":["string","null"]},"gainDb":{"type":"number"}},"required":["status","stinger","generationId","prompt","url","gainDb"]},{"type":"null"}]},"outro":{"anyOf":[{"type":"object","properties":{"status":{"type":"string","enum":["none","pending","ready","failed"]},"stinger":{"anyOf":[{"type":"string","enum":["whoosh","whoosh-fast","sparkle","ding","tada","victory-jingle","impact","magic-shimmer","reveal-sting","drum-roll"]},{"type":"null"}]},"generationId":{"anyOf":[{"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)$"},{"type":"null"}]},"prompt":{"type":["string","null"]},"url":{"type":["string","null"]},"gainDb":{"type":"number"}},"required":["status","stinger","generationId","prompt","url","gainDb"]},{"type":"null"}]}},"required":["intro","outro"]},"mix":{"type":"object","properties":{"status":{"type":"string","enum":["none","queued","mixing","ready","failed"]},"version":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"settings":{"type":"object","properties":{"musicDb":{"default":-4,"description":"Music level where nobody speaks (intro and button), dB against the voice","type":"number","minimum":-24,"maximum":6},"duckDb":{"default":12,"description":"How far the music dips under the voice, dB","type":"number","minimum":0,"maximum":24},"voiceStart":{"default":null,"description":"Seconds of music before the voice comes in; null = automatic for the length","anyOf":[{"type":"number","minimum":0,"maximum":8},{"type":"null"}]},"fit":{"default":true,"description":"Keep the spot exactly its length: a voice that runs long is tightened (up to 8 % faster) and the music ends on time","type":"boolean"},"preview":{"default":"social","description":"The destination the studio plays","type":"string","enum":["broadcast","broadcast-us","social","podcast"]}}},"error":{"type":["string","null"]},"stale":{"type":"boolean","description":"Tracks or settings changed after this mix"},"timeline":{"anyOf":[{"type":"object","properties":{"total":{"type":"number"},"voiceStart":{"type":"number"},"voiceEnd":{"type":"number"},"tempo":{"type":"number"},"overBy":{"type":"number","description":"Seconds past the spot length (0 when it fits)"},"duck":{"type":"array","items":{"type":"object","properties":{"start":{"type":"number"},"end":{"type":"number"}},"required":["start","end"]},"description":"Where the music dips under the voice"},"introAt":{"type":["number","null"]},"outroAt":{"type":["number","null"]},"musicFadeOut":{"type":"number"}},"required":["total","voiceStart","voiceEnd","tempo","overBy","duck","introAt","outroAt","musicFadeOut"]},{"type":"null"}]},"peaks":{"anyOf":[{"type":"object","properties":{"voice":{"type":"array","items":{"type":"number"}},"music":{"type":"array","items":{"type":"number"}},"mix":{"type":"array","items":{"type":"number"}}},"required":["voice","music","mix"]},{"type":"null"}],"description":"20 values a second over the whole spot"},"voiceOnlyUrl":{"description":"The voice alone on the same timeline and loudness (before/after)","type":["string","null"]},"outputs":{"type":"array","items":{"type":"object","properties":{"destination":{"type":"string","enum":["broadcast","broadcast-us","social","podcast"]},"lufs":{"description":"Measured integrated loudness","type":["number","null"]},"truePeak":{"description":"Measured true peak, dBTP","type":["number","null"]},"mp3":{"type":"object","properties":{"url":{"type":"string"},"downloadUrl":{"type":"string"}},"required":["url","downloadUrl"]},"wav":{"type":"object","properties":{"url":{"type":"string"},"downloadUrl":{"type":"string"}},"required":["url","downloadUrl"]}},"required":["destination","lufs","truePeak","mp3","wav"]}},"mixedAt":{"type":["string","null"]}},"required":["status","version","settings","error","stale","timeline","peaks","voiceOnlyUrl","outputs","mixedAt"]},"campaign":{"type":"array","items":{"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)$"},"length":{"anyOf":[{"type":"number","const":6},{"type":"number","const":15},{"type":"number","const":30},{"type":"number","const":60}],"description":"Spot length in seconds: 6 (bumper), 15, 30 or 60"},"title":{"type":"string"},"ready":{"type":"boolean"}},"required":["id","length","title","ready"]},"description":"Every spot of the campaign, shortest first"}},"required":["id","createdAt","updatedAt","title","campaignId","brief","scripts","scriptId","lines","estimatedSeconds","voice","music","sfx","mix","campaign"]},"example":{"id":"01990000-0000-7000-8000-000000000001","createdAt":"2026-09-19T12:00:00.000Z","updatedAt":"2026-09-19T12:00:00.000Z","title":"example","campaignId":"01990000-0000-7000-8000-000000000001","brief":{"business":"example","offer":"example","cta":"","contact":"","audience":"","dialect":"ar-SA","length":6,"style":"retail","season":"ramadan","voices":"single"},"scripts":[{"id":"example","title":"example","angle":"example","lines":[{"speaker":"narrator","text":"مرحباً بك في فوكلا."}],"estimatedSeconds":1}],"scriptId":"example","lines":[{"speaker":"narrator","text":"مرحباً بك في فوكلا."}],"estimatedSeconds":1,"voice":{"status":"none","generationId":"01990000-0000-7000-8000-000000000001","voiceId":"01990000-0000-7000-8000-000000000001","characterVoiceId":"01990000-0000-7000-8000-000000000001","url":"example","peaks":[1],"duration":"example","progress":1,"error":"example","stale":true},"music":{"status":"none","source":"none","mood":"upbeat","generationId":"01990000-0000-7000-8000-000000000001","uploadId":"01990000-0000-7000-8000-000000000001","name":"Noura","url":"example","peaks":[1],"duration":"example","progress":1,"error":"example"},"sfx":{"intro":{"status":"none","stinger":"whoosh","generationId":"01990000-0000-7000-8000-000000000001","prompt":"مرحباً بك في فوكلا.","url":"example","gainDb":1},"outro":{"status":"none","stinger":"whoosh","generationId":"01990000-0000-7000-8000-000000000001","prompt":"مرحباً بك في فوكلا.","url":"example","gainDb":1}},"mix":{"status":"none","version":-9007199254740991,"settings":{"musicDb":-4,"duckDb":12,"voiceStart":null,"fit":true,"preview":"social"},"error":"example","stale":true,"timeline":{"total":1,"voiceStart":1,"voiceEnd":1,"tempo":1,"overBy":1,"duck":[{"start":1,"end":1}],"introAt":"2026-09-19T12:00:00.000Z","outroAt":"2026-09-19T12:00:00.000Z","musicFadeOut":1},"peaks":{"voice":[1],"music":[1],"mix":[1]},"voiceOnlyUrl":"http://localhost:4000/example","outputs":[{"destination":"broadcast","lufs":"example","truePeak":"example","mp3":{"url":"example","downloadUrl":"http://localhost:4000/example"},"wav":{"url":"example","downloadUrl":"http://localhost:4000/example"}}],"mixedAt":"2026-09-19T12:00:00.000Z"},"campaign":[{"id":"01990000-0000-7000-8000-000000000001","length":6,"title":"example","ready":true}]}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/ad-spots/{id}/music","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/ad-spots/{id}/music","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/ad-spots/{id}/music","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/ad-spots/{id}/music","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/ad-spots/{id}/music","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/ad-spots/{id}/music","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/ad-spots/{id}/music","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/ad-spots/{id}/music","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/ad-spots/{id}/music","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/ad-spots/{id}/music","traceId":"request-id"}}}}}}},"/v1/ad-spots/{id}/sfx":{"post":{"operationId":"makeAdSpotSfx","tags":["Ad spots"],"summary":"Make a sound effect for the intro or the outro (an sfx generation). Built-in stingers are free through PATCH. Requires an Idempotency-Key header","description":"Requires workspace role editor or above. Retry with the same Idempotency-Key and identical body. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"Idempotency-Key","in":"header","required":true,"schema":{"type":"string","maxLength":200},"example":"request-2026-001"},{"name":"X-CSRF-Token","in":"header","required":false,"description":"Required for cookie-authenticated mutations; returned by sign-in/sign-up.","schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"slot":{"type":"string","enum":["intro","outro"]},"prompt":{"type":"string","minLength":3,"maxLength":300,"description":"What the effect sounds like, any language"}},"required":["slot","prompt"]},"example":{"slot":"intro","prompt":"مرحباً بك في فوكلا."}}}},"responses":{"202":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","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)$"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"},"title":{"type":"string"},"campaignId":{"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":"The first spot of the campaign (itself for the first)"},"brief":{"type":"object","properties":{"business":{"type":"string","minLength":1,"maxLength":120,"description":"Business or brand name, said as written"},"offer":{"type":"string","minLength":3,"maxLength":800,"description":"What is advertised: product, service, offer, price"},"cta":{"default":"","description":"Call to action (visit, call, order…)","type":"string","maxLength":200},"contact":{"default":"","description":"Phone, website or social handle, said exactly once","type":"string","maxLength":200},"audience":{"default":"","type":"string","maxLength":300},"dialect":{"type":"string","minLength":2,"maxLength":20,"description":"Dialect the spot is written and voiced in (ar-SA, ar-EG, ar for MSA, en-US…)"},"length":{"anyOf":[{"type":"number","const":6},{"type":"number","const":15},{"type":"number","const":30},{"type":"number","const":60}],"description":"Spot length in seconds: 6 (bumper), 15, 30 or 60"},"style":{"type":"string","enum":["retail","luxury","family","funny","seasonal","real-estate","food","tech"],"description":"Tone preset: energetic retail, luxury, warm family, funny, Ramadan/Eid seasonal, real estate, restaurant/food, tech/app"},"season":{"type":"string","enum":["ramadan","eid"],"description":"Seasonal greeting woven in (seasonal style)"},"voices":{"default":"single","type":"string","enum":["single","duo"],"description":"single = one narrator (tts); duo = narrator + a character (dialogue)"}},"required":["business","offer","dialect","length","style"]},"scripts":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"title":{"type":"string"},"angle":{"type":"string"},"lines":{"minItems":1,"maxItems":24,"type":"array","items":{"type":"object","properties":{"speaker":{"type":"string","enum":["narrator","character"]},"text":{"type":"string","minLength":1,"maxLength":800,"description":"Spoken words with inline TTS tags ([excited], [pause 0.5s]…; docs/TTS_TAGS.md)"}},"required":["speaker","text"]}},"estimatedSeconds":{"type":"number","description":"Speech estimate, tags excluded, pauses included"}},"required":["id","title","angle","lines","estimatedSeconds"]}},"scriptId":{"type":["string","null"]},"lines":{"type":"array","items":{"type":"object","properties":{"speaker":{"type":"string","enum":["narrator","character"]},"text":{"type":"string","minLength":1,"maxLength":800,"description":"Spoken words with inline TTS tags ([excited], [pause 0.5s]…; docs/TTS_TAGS.md)"}},"required":["speaker","text"]}},"estimatedSeconds":{"type":"number"},"voice":{"type":"object","properties":{"status":{"type":"string","enum":["none","pending","ready","failed"]},"generationId":{"anyOf":[{"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)$"},{"type":"null"}]},"voiceId":{"anyOf":[{"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)$"},{"type":"null"}]},"characterVoiceId":{"anyOf":[{"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)$"},{"type":"null"}]},"url":{"type":["string","null"]},"peaks":{"type":"array","items":{"type":"number"}},"duration":{"type":["number","null"]},"progress":{"type":"number"},"error":{"type":["string","null"]},"stale":{"type":"boolean","description":"The script changed after this take was made"}},"required":["status","generationId","voiceId","characterVoiceId","url","peaks","duration","progress","error","stale"]},"music":{"type":"object","properties":{"status":{"type":"string","enum":["none","pending","ready","failed"]},"source":{"type":"string","enum":["none","generated","library","upload"]},"mood":{"anyOf":[{"type":"string","enum":["upbeat","corporate","luxury","warm","quirky","oriental","khaleeji","cinematic","chill","electronic"],"description":"Music bed mood"},{"type":"null"}]},"generationId":{"anyOf":[{"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)$"},{"type":"null"}]},"uploadId":{"anyOf":[{"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)$"},{"type":"null"}]},"name":{"type":["string","null"]},"url":{"type":["string","null"]},"peaks":{"type":"array","items":{"type":"number"}},"duration":{"type":["number","null"]},"progress":{"type":"number"},"error":{"type":["string","null"]}},"required":["status","source","mood","generationId","uploadId","name","url","peaks","duration","progress","error"]},"sfx":{"type":"object","properties":{"intro":{"anyOf":[{"type":"object","properties":{"status":{"type":"string","enum":["none","pending","ready","failed"]},"stinger":{"anyOf":[{"type":"string","enum":["whoosh","whoosh-fast","sparkle","ding","tada","victory-jingle","impact","magic-shimmer","reveal-sting","drum-roll"]},{"type":"null"}]},"generationId":{"anyOf":[{"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)$"},{"type":"null"}]},"prompt":{"type":["string","null"]},"url":{"type":["string","null"]},"gainDb":{"type":"number"}},"required":["status","stinger","generationId","prompt","url","gainDb"]},{"type":"null"}]},"outro":{"anyOf":[{"type":"object","properties":{"status":{"type":"string","enum":["none","pending","ready","failed"]},"stinger":{"anyOf":[{"type":"string","enum":["whoosh","whoosh-fast","sparkle","ding","tada","victory-jingle","impact","magic-shimmer","reveal-sting","drum-roll"]},{"type":"null"}]},"generationId":{"anyOf":[{"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)$"},{"type":"null"}]},"prompt":{"type":["string","null"]},"url":{"type":["string","null"]},"gainDb":{"type":"number"}},"required":["status","stinger","generationId","prompt","url","gainDb"]},{"type":"null"}]}},"required":["intro","outro"]},"mix":{"type":"object","properties":{"status":{"type":"string","enum":["none","queued","mixing","ready","failed"]},"version":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"settings":{"type":"object","properties":{"musicDb":{"default":-4,"description":"Music level where nobody speaks (intro and button), dB against the voice","type":"number","minimum":-24,"maximum":6},"duckDb":{"default":12,"description":"How far the music dips under the voice, dB","type":"number","minimum":0,"maximum":24},"voiceStart":{"default":null,"description":"Seconds of music before the voice comes in; null = automatic for the length","anyOf":[{"type":"number","minimum":0,"maximum":8},{"type":"null"}]},"fit":{"default":true,"description":"Keep the spot exactly its length: a voice that runs long is tightened (up to 8 % faster) and the music ends on time","type":"boolean"},"preview":{"default":"social","description":"The destination the studio plays","type":"string","enum":["broadcast","broadcast-us","social","podcast"]}}},"error":{"type":["string","null"]},"stale":{"type":"boolean","description":"Tracks or settings changed after this mix"},"timeline":{"anyOf":[{"type":"object","properties":{"total":{"type":"number"},"voiceStart":{"type":"number"},"voiceEnd":{"type":"number"},"tempo":{"type":"number"},"overBy":{"type":"number","description":"Seconds past the spot length (0 when it fits)"},"duck":{"type":"array","items":{"type":"object","properties":{"start":{"type":"number"},"end":{"type":"number"}},"required":["start","end"]},"description":"Where the music dips under the voice"},"introAt":{"type":["number","null"]},"outroAt":{"type":["number","null"]},"musicFadeOut":{"type":"number"}},"required":["total","voiceStart","voiceEnd","tempo","overBy","duck","introAt","outroAt","musicFadeOut"]},{"type":"null"}]},"peaks":{"anyOf":[{"type":"object","properties":{"voice":{"type":"array","items":{"type":"number"}},"music":{"type":"array","items":{"type":"number"}},"mix":{"type":"array","items":{"type":"number"}}},"required":["voice","music","mix"]},{"type":"null"}],"description":"20 values a second over the whole spot"},"voiceOnlyUrl":{"description":"The voice alone on the same timeline and loudness (before/after)","type":["string","null"]},"outputs":{"type":"array","items":{"type":"object","properties":{"destination":{"type":"string","enum":["broadcast","broadcast-us","social","podcast"]},"lufs":{"description":"Measured integrated loudness","type":["number","null"]},"truePeak":{"description":"Measured true peak, dBTP","type":["number","null"]},"mp3":{"type":"object","properties":{"url":{"type":"string"},"downloadUrl":{"type":"string"}},"required":["url","downloadUrl"]},"wav":{"type":"object","properties":{"url":{"type":"string"},"downloadUrl":{"type":"string"}},"required":["url","downloadUrl"]}},"required":["destination","lufs","truePeak","mp3","wav"]}},"mixedAt":{"type":["string","null"]}},"required":["status","version","settings","error","stale","timeline","peaks","voiceOnlyUrl","outputs","mixedAt"]},"campaign":{"type":"array","items":{"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)$"},"length":{"anyOf":[{"type":"number","const":6},{"type":"number","const":15},{"type":"number","const":30},{"type":"number","const":60}],"description":"Spot length in seconds: 6 (bumper), 15, 30 or 60"},"title":{"type":"string"},"ready":{"type":"boolean"}},"required":["id","length","title","ready"]},"description":"Every spot of the campaign, shortest first"}},"required":["id","createdAt","updatedAt","title","campaignId","brief","scripts","scriptId","lines","estimatedSeconds","voice","music","sfx","mix","campaign"]},"example":{"id":"01990000-0000-7000-8000-000000000001","createdAt":"2026-09-19T12:00:00.000Z","updatedAt":"2026-09-19T12:00:00.000Z","title":"example","campaignId":"01990000-0000-7000-8000-000000000001","brief":{"business":"example","offer":"example","cta":"","contact":"","audience":"","dialect":"ar-SA","length":6,"style":"retail","season":"ramadan","voices":"single"},"scripts":[{"id":"example","title":"example","angle":"example","lines":[{"speaker":"narrator","text":"مرحباً بك في فوكلا."}],"estimatedSeconds":1}],"scriptId":"example","lines":[{"speaker":"narrator","text":"مرحباً بك في فوكلا."}],"estimatedSeconds":1,"voice":{"status":"none","generationId":"01990000-0000-7000-8000-000000000001","voiceId":"01990000-0000-7000-8000-000000000001","characterVoiceId":"01990000-0000-7000-8000-000000000001","url":"example","peaks":[1],"duration":"example","progress":1,"error":"example","stale":true},"music":{"status":"none","source":"none","mood":"upbeat","generationId":"01990000-0000-7000-8000-000000000001","uploadId":"01990000-0000-7000-8000-000000000001","name":"Noura","url":"example","peaks":[1],"duration":"example","progress":1,"error":"example"},"sfx":{"intro":{"status":"none","stinger":"whoosh","generationId":"01990000-0000-7000-8000-000000000001","prompt":"مرحباً بك في فوكلا.","url":"example","gainDb":1},"outro":{"status":"none","stinger":"whoosh","generationId":"01990000-0000-7000-8000-000000000001","prompt":"مرحباً بك في فوكلا.","url":"example","gainDb":1}},"mix":{"status":"none","version":-9007199254740991,"settings":{"musicDb":-4,"duckDb":12,"voiceStart":null,"fit":true,"preview":"social"},"error":"example","stale":true,"timeline":{"total":1,"voiceStart":1,"voiceEnd":1,"tempo":1,"overBy":1,"duck":[{"start":1,"end":1}],"introAt":"2026-09-19T12:00:00.000Z","outroAt":"2026-09-19T12:00:00.000Z","musicFadeOut":1},"peaks":{"voice":[1],"music":[1],"mix":[1]},"voiceOnlyUrl":"http://localhost:4000/example","outputs":[{"destination":"broadcast","lufs":"example","truePeak":"example","mp3":{"url":"example","downloadUrl":"http://localhost:4000/example"},"wav":{"url":"example","downloadUrl":"http://localhost:4000/example"}}],"mixedAt":"2026-09-19T12:00:00.000Z"},"campaign":[{"id":"01990000-0000-7000-8000-000000000001","length":6,"title":"example","ready":true}]}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/ad-spots/{id}/sfx","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/ad-spots/{id}/sfx","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/ad-spots/{id}/sfx","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/ad-spots/{id}/sfx","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/ad-spots/{id}/sfx","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/ad-spots/{id}/sfx","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/ad-spots/{id}/sfx","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/ad-spots/{id}/sfx","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/ad-spots/{id}/sfx","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/ad-spots/{id}/sfx","traceId":"request-id"}}}}}}},"/v1/ad-spots/{id}/mix":{"post":{"operationId":"mixAdSpot","tags":["Ad spots"],"summary":"Mix again with these settings (free): music intro, ducking under the voice, button ending, every destination at its loudness with a true-peak limit. 409 while the voice or the music is not ready","description":"Requires workspace role editor or above. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"X-CSRF-Token","in":"header","required":false,"description":"Required for cookie-authenticated mutations; returned by sign-in/sign-up.","schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"musicDb":{"default":-4,"description":"Music level where nobody speaks (intro and button), dB against the voice","type":"number","minimum":-24,"maximum":6},"duckDb":{"default":12,"description":"How far the music dips under the voice, dB","type":"number","minimum":0,"maximum":24},"voiceStart":{"default":null,"description":"Seconds of music before the voice comes in; null = automatic for the length","anyOf":[{"type":"number","minimum":0,"maximum":8},{"type":"null"}]},"fit":{"default":true,"description":"Keep the spot exactly its length: a voice that runs long is tightened (up to 8 % faster) and the music ends on time","type":"boolean"},"preview":{"default":"social","description":"The destination the studio plays","type":"string","enum":["broadcast","broadcast-us","social","podcast"]}}},"example":{"musicDb":-4,"duckDb":12,"voiceStart":null,"fit":true,"preview":"social"}}}},"responses":{"202":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","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)$"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"},"title":{"type":"string"},"campaignId":{"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":"The first spot of the campaign (itself for the first)"},"brief":{"type":"object","properties":{"business":{"type":"string","minLength":1,"maxLength":120,"description":"Business or brand name, said as written"},"offer":{"type":"string","minLength":3,"maxLength":800,"description":"What is advertised: product, service, offer, price"},"cta":{"default":"","description":"Call to action (visit, call, order…)","type":"string","maxLength":200},"contact":{"default":"","description":"Phone, website or social handle, said exactly once","type":"string","maxLength":200},"audience":{"default":"","type":"string","maxLength":300},"dialect":{"type":"string","minLength":2,"maxLength":20,"description":"Dialect the spot is written and voiced in (ar-SA, ar-EG, ar for MSA, en-US…)"},"length":{"anyOf":[{"type":"number","const":6},{"type":"number","const":15},{"type":"number","const":30},{"type":"number","const":60}],"description":"Spot length in seconds: 6 (bumper), 15, 30 or 60"},"style":{"type":"string","enum":["retail","luxury","family","funny","seasonal","real-estate","food","tech"],"description":"Tone preset: energetic retail, luxury, warm family, funny, Ramadan/Eid seasonal, real estate, restaurant/food, tech/app"},"season":{"type":"string","enum":["ramadan","eid"],"description":"Seasonal greeting woven in (seasonal style)"},"voices":{"default":"single","type":"string","enum":["single","duo"],"description":"single = one narrator (tts); duo = narrator + a character (dialogue)"}},"required":["business","offer","dialect","length","style"]},"scripts":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"title":{"type":"string"},"angle":{"type":"string"},"lines":{"minItems":1,"maxItems":24,"type":"array","items":{"type":"object","properties":{"speaker":{"type":"string","enum":["narrator","character"]},"text":{"type":"string","minLength":1,"maxLength":800,"description":"Spoken words with inline TTS tags ([excited], [pause 0.5s]…; docs/TTS_TAGS.md)"}},"required":["speaker","text"]}},"estimatedSeconds":{"type":"number","description":"Speech estimate, tags excluded, pauses included"}},"required":["id","title","angle","lines","estimatedSeconds"]}},"scriptId":{"type":["string","null"]},"lines":{"type":"array","items":{"type":"object","properties":{"speaker":{"type":"string","enum":["narrator","character"]},"text":{"type":"string","minLength":1,"maxLength":800,"description":"Spoken words with inline TTS tags ([excited], [pause 0.5s]…; docs/TTS_TAGS.md)"}},"required":["speaker","text"]}},"estimatedSeconds":{"type":"number"},"voice":{"type":"object","properties":{"status":{"type":"string","enum":["none","pending","ready","failed"]},"generationId":{"anyOf":[{"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)$"},{"type":"null"}]},"voiceId":{"anyOf":[{"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)$"},{"type":"null"}]},"characterVoiceId":{"anyOf":[{"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)$"},{"type":"null"}]},"url":{"type":["string","null"]},"peaks":{"type":"array","items":{"type":"number"}},"duration":{"type":["number","null"]},"progress":{"type":"number"},"error":{"type":["string","null"]},"stale":{"type":"boolean","description":"The script changed after this take was made"}},"required":["status","generationId","voiceId","characterVoiceId","url","peaks","duration","progress","error","stale"]},"music":{"type":"object","properties":{"status":{"type":"string","enum":["none","pending","ready","failed"]},"source":{"type":"string","enum":["none","generated","library","upload"]},"mood":{"anyOf":[{"type":"string","enum":["upbeat","corporate","luxury","warm","quirky","oriental","khaleeji","cinematic","chill","electronic"],"description":"Music bed mood"},{"type":"null"}]},"generationId":{"anyOf":[{"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)$"},{"type":"null"}]},"uploadId":{"anyOf":[{"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)$"},{"type":"null"}]},"name":{"type":["string","null"]},"url":{"type":["string","null"]},"peaks":{"type":"array","items":{"type":"number"}},"duration":{"type":["number","null"]},"progress":{"type":"number"},"error":{"type":["string","null"]}},"required":["status","source","mood","generationId","uploadId","name","url","peaks","duration","progress","error"]},"sfx":{"type":"object","properties":{"intro":{"anyOf":[{"type":"object","properties":{"status":{"type":"string","enum":["none","pending","ready","failed"]},"stinger":{"anyOf":[{"type":"string","enum":["whoosh","whoosh-fast","sparkle","ding","tada","victory-jingle","impact","magic-shimmer","reveal-sting","drum-roll"]},{"type":"null"}]},"generationId":{"anyOf":[{"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)$"},{"type":"null"}]},"prompt":{"type":["string","null"]},"url":{"type":["string","null"]},"gainDb":{"type":"number"}},"required":["status","stinger","generationId","prompt","url","gainDb"]},{"type":"null"}]},"outro":{"anyOf":[{"type":"object","properties":{"status":{"type":"string","enum":["none","pending","ready","failed"]},"stinger":{"anyOf":[{"type":"string","enum":["whoosh","whoosh-fast","sparkle","ding","tada","victory-jingle","impact","magic-shimmer","reveal-sting","drum-roll"]},{"type":"null"}]},"generationId":{"anyOf":[{"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)$"},{"type":"null"}]},"prompt":{"type":["string","null"]},"url":{"type":["string","null"]},"gainDb":{"type":"number"}},"required":["status","stinger","generationId","prompt","url","gainDb"]},{"type":"null"}]}},"required":["intro","outro"]},"mix":{"type":"object","properties":{"status":{"type":"string","enum":["none","queued","mixing","ready","failed"]},"version":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"settings":{"type":"object","properties":{"musicDb":{"default":-4,"description":"Music level where nobody speaks (intro and button), dB against the voice","type":"number","minimum":-24,"maximum":6},"duckDb":{"default":12,"description":"How far the music dips under the voice, dB","type":"number","minimum":0,"maximum":24},"voiceStart":{"default":null,"description":"Seconds of music before the voice comes in; null = automatic for the length","anyOf":[{"type":"number","minimum":0,"maximum":8},{"type":"null"}]},"fit":{"default":true,"description":"Keep the spot exactly its length: a voice that runs long is tightened (up to 8 % faster) and the music ends on time","type":"boolean"},"preview":{"default":"social","description":"The destination the studio plays","type":"string","enum":["broadcast","broadcast-us","social","podcast"]}}},"error":{"type":["string","null"]},"stale":{"type":"boolean","description":"Tracks or settings changed after this mix"},"timeline":{"anyOf":[{"type":"object","properties":{"total":{"type":"number"},"voiceStart":{"type":"number"},"voiceEnd":{"type":"number"},"tempo":{"type":"number"},"overBy":{"type":"number","description":"Seconds past the spot length (0 when it fits)"},"duck":{"type":"array","items":{"type":"object","properties":{"start":{"type":"number"},"end":{"type":"number"}},"required":["start","end"]},"description":"Where the music dips under the voice"},"introAt":{"type":["number","null"]},"outroAt":{"type":["number","null"]},"musicFadeOut":{"type":"number"}},"required":["total","voiceStart","voiceEnd","tempo","overBy","duck","introAt","outroAt","musicFadeOut"]},{"type":"null"}]},"peaks":{"anyOf":[{"type":"object","properties":{"voice":{"type":"array","items":{"type":"number"}},"music":{"type":"array","items":{"type":"number"}},"mix":{"type":"array","items":{"type":"number"}}},"required":["voice","music","mix"]},{"type":"null"}],"description":"20 values a second over the whole spot"},"voiceOnlyUrl":{"description":"The voice alone on the same timeline and loudness (before/after)","type":["string","null"]},"outputs":{"type":"array","items":{"type":"object","properties":{"destination":{"type":"string","enum":["broadcast","broadcast-us","social","podcast"]},"lufs":{"description":"Measured integrated loudness","type":["number","null"]},"truePeak":{"description":"Measured true peak, dBTP","type":["number","null"]},"mp3":{"type":"object","properties":{"url":{"type":"string"},"downloadUrl":{"type":"string"}},"required":["url","downloadUrl"]},"wav":{"type":"object","properties":{"url":{"type":"string"},"downloadUrl":{"type":"string"}},"required":["url","downloadUrl"]}},"required":["destination","lufs","truePeak","mp3","wav"]}},"mixedAt":{"type":["string","null"]}},"required":["status","version","settings","error","stale","timeline","peaks","voiceOnlyUrl","outputs","mixedAt"]},"campaign":{"type":"array","items":{"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)$"},"length":{"anyOf":[{"type":"number","const":6},{"type":"number","const":15},{"type":"number","const":30},{"type":"number","const":60}],"description":"Spot length in seconds: 6 (bumper), 15, 30 or 60"},"title":{"type":"string"},"ready":{"type":"boolean"}},"required":["id","length","title","ready"]},"description":"Every spot of the campaign, shortest first"}},"required":["id","createdAt","updatedAt","title","campaignId","brief","scripts","scriptId","lines","estimatedSeconds","voice","music","sfx","mix","campaign"]},"example":{"id":"01990000-0000-7000-8000-000000000001","createdAt":"2026-09-19T12:00:00.000Z","updatedAt":"2026-09-19T12:00:00.000Z","title":"example","campaignId":"01990000-0000-7000-8000-000000000001","brief":{"business":"example","offer":"example","cta":"","contact":"","audience":"","dialect":"ar-SA","length":6,"style":"retail","season":"ramadan","voices":"single"},"scripts":[{"id":"example","title":"example","angle":"example","lines":[{"speaker":"narrator","text":"مرحباً بك في فوكلا."}],"estimatedSeconds":1}],"scriptId":"example","lines":[{"speaker":"narrator","text":"مرحباً بك في فوكلا."}],"estimatedSeconds":1,"voice":{"status":"none","generationId":"01990000-0000-7000-8000-000000000001","voiceId":"01990000-0000-7000-8000-000000000001","characterVoiceId":"01990000-0000-7000-8000-000000000001","url":"example","peaks":[1],"duration":"example","progress":1,"error":"example","stale":true},"music":{"status":"none","source":"none","mood":"upbeat","generationId":"01990000-0000-7000-8000-000000000001","uploadId":"01990000-0000-7000-8000-000000000001","name":"Noura","url":"example","peaks":[1],"duration":"example","progress":1,"error":"example"},"sfx":{"intro":{"status":"none","stinger":"whoosh","generationId":"01990000-0000-7000-8000-000000000001","prompt":"مرحباً بك في فوكلا.","url":"example","gainDb":1},"outro":{"status":"none","stinger":"whoosh","generationId":"01990000-0000-7000-8000-000000000001","prompt":"مرحباً بك في فوكلا.","url":"example","gainDb":1}},"mix":{"status":"none","version":-9007199254740991,"settings":{"musicDb":-4,"duckDb":12,"voiceStart":null,"fit":true,"preview":"social"},"error":"example","stale":true,"timeline":{"total":1,"voiceStart":1,"voiceEnd":1,"tempo":1,"overBy":1,"duck":[{"start":1,"end":1}],"introAt":"2026-09-19T12:00:00.000Z","outroAt":"2026-09-19T12:00:00.000Z","musicFadeOut":1},"peaks":{"voice":[1],"music":[1],"mix":[1]},"voiceOnlyUrl":"http://localhost:4000/example","outputs":[{"destination":"broadcast","lufs":"example","truePeak":"example","mp3":{"url":"example","downloadUrl":"http://localhost:4000/example"},"wav":{"url":"example","downloadUrl":"http://localhost:4000/example"}}],"mixedAt":"2026-09-19T12:00:00.000Z"},"campaign":[{"id":"01990000-0000-7000-8000-000000000001","length":6,"title":"example","ready":true}]}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/ad-spots/{id}/mix","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/ad-spots/{id}/mix","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/ad-spots/{id}/mix","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/ad-spots/{id}/mix","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/ad-spots/{id}/mix","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/ad-spots/{id}/mix","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/ad-spots/{id}/mix","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/ad-spots/{id}/mix","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/ad-spots/{id}/mix","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/ad-spots/{id}/mix","traceId":"request-id"}}}}}}},"/v1/ad-spots/{id}/cutdowns":{"post":{"operationId":"createAdSpotCutdowns","tags":["Ad spots"],"summary":"Add spots of other lengths to the campaign (same brief, voices, music and stingers); each gets its own script","description":"Requires workspace role editor or above. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"X-CSRF-Token","in":"header","required":false,"description":"Required for cookie-authenticated mutations; returned by sign-in/sign-up.","schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"lengths":{"minItems":1,"maxItems":4,"type":"array","items":{"anyOf":[{"type":"number","const":6},{"type":"number","const":15},{"type":"number","const":30},{"type":"number","const":60}],"description":"Spot length in seconds: 6 (bumper), 15, 30 or 60"}}},"required":["lengths"]},"example":{"lengths":[6]}}}},"responses":{"201":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"items":{"type":"array","items":{"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)$"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"},"title":{"type":"string"},"campaignId":{"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":"The first spot of the campaign (itself for the first)"},"brief":{"type":"object","properties":{"business":{"type":"string","minLength":1,"maxLength":120,"description":"Business or brand name, said as written"},"offer":{"type":"string","minLength":3,"maxLength":800,"description":"What is advertised: product, service, offer, price"},"cta":{"default":"","description":"Call to action (visit, call, order…)","type":"string","maxLength":200},"contact":{"default":"","description":"Phone, website or social handle, said exactly once","type":"string","maxLength":200},"audience":{"default":"","type":"string","maxLength":300},"dialect":{"type":"string","minLength":2,"maxLength":20,"description":"Dialect the spot is written and voiced in (ar-SA, ar-EG, ar for MSA, en-US…)"},"length":{"anyOf":[{"type":"number","const":6},{"type":"number","const":15},{"type":"number","const":30},{"type":"number","const":60}],"description":"Spot length in seconds: 6 (bumper), 15, 30 or 60"},"style":{"type":"string","enum":["retail","luxury","family","funny","seasonal","real-estate","food","tech"],"description":"Tone preset: energetic retail, luxury, warm family, funny, Ramadan/Eid seasonal, real estate, restaurant/food, tech/app"},"season":{"type":"string","enum":["ramadan","eid"],"description":"Seasonal greeting woven in (seasonal style)"},"voices":{"default":"single","type":"string","enum":["single","duo"],"description":"single = one narrator (tts); duo = narrator + a character (dialogue)"}},"required":["business","offer","dialect","length","style"]},"estimatedSeconds":{"type":"number"},"status":{"type":"string","enum":["draft","voicing","mixing","ready"]},"previewUrl":{"type":["string","null"]},"duration":{"type":["number","null"]}},"required":["id","createdAt","updatedAt","title","campaignId","brief","estimatedSeconds","status","previewUrl","duration"]}}},"required":["items"]},"example":{"items":[{"id":"01990000-0000-7000-8000-000000000001","createdAt":"2026-09-19T12:00:00.000Z","updatedAt":"2026-09-19T12:00:00.000Z","title":"example","campaignId":"01990000-0000-7000-8000-000000000001","brief":{"business":"example","offer":"example","cta":"","contact":"","audience":"","dialect":"ar-SA","length":6,"style":"retail","season":"ramadan","voices":"single"},"estimatedSeconds":1,"status":"draft","previewUrl":"http://localhost:4000/example","duration":"example"}]}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/ad-spots/{id}/cutdowns","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/ad-spots/{id}/cutdowns","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/ad-spots/{id}/cutdowns","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/ad-spots/{id}/cutdowns","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/ad-spots/{id}/cutdowns","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/ad-spots/{id}/cutdowns","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/ad-spots/{id}/cutdowns","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/ad-spots/{id}/cutdowns","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/ad-spots/{id}/cutdowns","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/ad-spots/{id}/cutdowns","traceId":"request-id"}}}}}}},"/v1/images/options":{"get":{"operationId":"getImageOptions","tags":["Images"],"summary":"Whether the plan includes the image studio, the tiers it may use with their credits, and its limits","description":"Requires workspace role viewer or above. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false}],"security":[{"session":[]},{"apiKey":[]}],"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"plan":{"type":"string"},"included":{"type":"boolean","description":"The plan includes the image studio"},"available":{"type":"boolean","description":"A provider serves an allowed tier"},"limits":{"type":"object","properties":{"imageGeneration":{"default":false,"description":"The image studio (make images from a description); credits are the limit","type":"boolean"},"imageEdit":{"default":false,"description":"Editing photos and using reference photos (any run with a photo); without it the studio only makes images from a description","type":"boolean"},"imageTiers":{"default":[],"description":"Image quality tiers (product model slugs with data.kind = image) the plan may use","maxItems":20,"type":"array","items":{"type":"string","minLength":1,"maxLength":100}},"imageMaxResolution":{"default":"1K","description":"Largest size the plan may ask for","type":"string","enum":["1K","2K","4K"]},"imageMaxReferences":{"default":0,"description":"Reference photos one run may take (an image being edited counts as one)","type":"integer","minimum":0,"maximum":16},"imageTransparent":{"default":false,"description":"Transparent backgrounds (tiers that offer them)","type":"boolean"},"imageBatch":{"default":1,"description":"Images one run may make","type":"integer","minimum":1,"maximum":4},"imageConcurrent":{"default":1,"description":"Runs in progress at once per workspace","type":"integer","minimum":0,"maximum":32},"imageRemoveBackground":{"default":false,"description":"The background removal tool (one photo in, the subject on a clear background)","type":"boolean"},"imageEnhance":{"default":false,"description":"The enhance tool (the same photo sharper at 2K, or 4K within imageMaxResolution)","type":"boolean"},"imageToolCredits":{"default":{},"description":"Credits per image for the tools on this plan; a missing price uses the default (background removal 300, enhance 400 at 2K and 700 at 4K)","type":"object","properties":{"removeBackground":{"type":"integer","minimum":1,"maximum":100000},"enhance2K":{"type":"integer","minimum":1,"maximum":100000},"enhance4K":{"type":"integer","minimum":1,"maximum":100000}}}}},"balance":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Credits the workspace has now"},"running":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Runs in progress"},"tiers":{"type":"array","items":{"type":"object","properties":{"slug":{"type":"string"},"name":{"type":"object","properties":{"ar":{"type":"string","minLength":1},"en":{"type":"string","minLength":1}},"required":["ar","en"]},"description":{"anyOf":[{"type":"object","properties":{"ar":{"type":"string","minLength":1},"en":{"type":"string","minLength":1}},"required":["ar","en"]},{"type":"null"}]},"credits":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Credits per image at 1K"},"resolutionCredits":{"type":"object","propertyNames":{"type":"string","enum":["1K","2K","4K"],"description":"Long side about 1,000, 2,000 or 4,000 pixels"},"additionalProperties":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"required":["1K","2K","4K"],"description":"Credits per image at each size the tier renders"},"resolutions":{"type":"array","items":{"type":"string","enum":["1K","2K","4K"],"description":"Long side about 1,000, 2,000 or 4,000 pixels"}},"referenceCredits":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Credits per reference photo, per image"},"maxReferences":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"transparent":{"type":"boolean"},"estimatedSeconds":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"available":{"type":"boolean","description":"A real provider serves this tier"},"unavailableReason":{"anyOf":[{"type":"string","enum":["disabled","no_provider"]},{"type":"null"}]}},"required":["slug","name","description","credits","resolutionCredits","resolutions","referenceCredits","maxReferences","transparent","estimatedSeconds","available","unavailableReason"]},"description":"Tiers the plan may use"},"lockedTiers":{"type":"array","items":{"type":"object","properties":{"slug":{"type":"string"},"name":{"type":"object","properties":{"ar":{"type":"string","minLength":1},"en":{"type":"string","minLength":1}},"required":["ar","en"]},"description":{"anyOf":[{"type":"object","properties":{"ar":{"type":"string","minLength":1},"en":{"type":"string","minLength":1}},"required":["ar","en"]},{"type":"null"}]},"credits":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Credits per image at 1K"},"resolutionCredits":{"type":"object","propertyNames":{"type":"string","enum":["1K","2K","4K"],"description":"Long side about 1,000, 2,000 or 4,000 pixels"},"additionalProperties":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"required":["1K","2K","4K"],"description":"Credits per image at each size the tier renders"},"resolutions":{"type":"array","items":{"type":"string","enum":["1K","2K","4K"],"description":"Long side about 1,000, 2,000 or 4,000 pixels"}},"referenceCredits":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Credits per reference photo, per image"},"maxReferences":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"transparent":{"type":"boolean"},"estimatedSeconds":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"available":{"type":"boolean","description":"A real provider serves this tier"},"unavailableReason":{"anyOf":[{"type":"string","enum":["disabled","no_provider"]},{"type":"null"}]}},"required":["slug","name","description","credits","resolutionCredits","resolutions","referenceCredits","maxReferences","transparent","estimatedSeconds","available","unavailableReason"]},"description":"Tiers of higher plans"},"aspectRatios":{"type":"array","items":{"type":"string","enum":["1:1","4:5","3:4","2:3","9:16","16:9","3:2","4:3","21:9"],"description":"Shape of the images; the result is cropped to it exactly"}},"tools":{"type":"array","items":{"type":"object","properties":{"tool":{"type":"string","enum":["remove-background","enhance"],"description":"One-click tools: remove-background (the subject alone on a clear background, PNG) or enhance (the same photo sharper at 2K or 4K)"},"resolutionCredits":{"type":"object","propertyNames":{"type":"string","enum":["1K","2K","4K"],"description":"Long side about 1,000, 2,000 or 4,000 pixels"},"additionalProperties":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"required":["1K","2K","4K"],"description":"Credits per image at each size the tool makes"},"resolutions":{"type":"array","items":{"type":"string","enum":["1K","2K","4K"],"description":"Long side about 1,000, 2,000 or 4,000 pixels"}},"estimatedSeconds":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"available":{"type":"boolean","description":"A provider serves the tool's tier"},"locked":{"anyOf":[{"type":"string","enum":["imageGeneration","imageRemoveBackground","imageEnhance"]},{"type":"null"}],"description":"The entitlement the plan lacks for this tool, or null"}},"required":["tool","resolutionCredits","resolutions","estimatedSeconds","available","locked"]},"description":"One-click tools (background removal, enhance)"}},"required":["plan","included","available","limits","balance","running","tiers","lockedTiers","aspectRatios","tools"]},"example":{"plan":"example","included":true,"available":true,"limits":{"imageGeneration":false,"imageEdit":false,"imageTiers":[],"imageMaxResolution":"1K","imageMaxReferences":0,"imageTransparent":false,"imageBatch":1,"imageConcurrent":1,"imageRemoveBackground":false,"imageEnhance":false,"imageToolCredits":{}},"balance":-9007199254740991,"running":-9007199254740991,"tiers":[{"slug":"example","name":{"ar":"مثال","en":"example"},"description":{"ar":"مثال","en":"example"},"credits":-9007199254740991,"resolutionCredits":{},"resolutions":["1K"],"referenceCredits":-9007199254740991,"maxReferences":-9007199254740991,"transparent":true,"estimatedSeconds":-9007199254740991,"available":true,"unavailableReason":"disabled"}],"lockedTiers":[{"slug":"example","name":{"ar":"مثال","en":"example"},"description":{"ar":"مثال","en":"example"},"credits":-9007199254740991,"resolutionCredits":{},"resolutions":["1K"],"referenceCredits":-9007199254740991,"maxReferences":-9007199254740991,"transparent":true,"estimatedSeconds":-9007199254740991,"available":true,"unavailableReason":"disabled"}],"aspectRatios":["1:1"],"tools":[{"tool":"remove-background","resolutionCredits":{},"resolutions":["1K"],"estimatedSeconds":-9007199254740991,"available":true,"locked":"imageGeneration"}]}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/images/options","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/images/options","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/images/options","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/images/options","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/images/options","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/images/options","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/images/options","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/images/options","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/images/options","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/images/options","traceId":"request-id"}}}}}}},"/v1/images/{id}/to-upload":{"post":{"operationId":"imageToUpload","tags":["Images"],"summary":"Copy one finished image into the workspace uploads (Product video photo, video edit reference)","description":"Requires workspace role editor or above. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"X-CSRF-Token","in":"header","required":false,"description":"Required for cookie-authenticated mutations; returned by sign-in/sign-up.","schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"index":{"type":"integer","minimum":0,"maximum":3}},"required":["index"]},"example":{"index":0}}}},"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"uploadId":{"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)$"},"url":{"type":"string"},"width":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"height":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]}},"required":["uploadId","url","width","height"]},"example":{"uploadId":"01990000-0000-7000-8000-000000000001","url":"example","width":-9007199254740991,"height":-9007199254740991}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/images/{id}/to-upload","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/images/{id}/to-upload","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/images/{id}/to-upload","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/images/{id}/to-upload","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/images/{id}/to-upload","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/images/{id}/to-upload","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/images/{id}/to-upload","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/images/{id}/to-upload","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/images/{id}/to-upload","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/images/{id}/to-upload","traceId":"request-id"}}}}}}},"/v1/images":{"get":{"operationId":"listImageRuns","tags":["Images"],"summary":"list Image Runs","description":"Requires workspace role viewer or above. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"cursor","in":"query","required":false,"schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"schema":{"default":25,"type":"integer","minimum":1,"maximum":100}},{"name":"q","in":"query","required":false,"schema":{"type":"string","maxLength":200}},{"name":"mode","in":"query","required":false,"schema":{"description":"Only runs made from a description (create) or changing a photo (edit)","type":"string","enum":["create","edit"]}}],"security":[{"session":[]},{"apiKey":[]}],"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"items":{"type":"array","items":{"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)$"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"},"data":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}},"title":{"type":"string"},"status":{"type":"string","enum":["queued","generating","ready","failed"],"description":"queued = waiting for a worker; generating = the model is drawing; ready = done (see each output); failed = nothing was made, refunded"},"progress":{"type":"number"},"error":{"description":"CONTENT_REJECTED (the model refused the prompt or a photo), CONTENT_BLOCKED (our policy), IMAGE_FAILED, PROVIDER_UNAVAILABLE","type":["string","null"]},"prompt":{"type":"string"},"tier":{"type":"string"},"tierName":{"anyOf":[{"type":"object","properties":{"ar":{"type":"string","minLength":1},"en":{"type":"string","minLength":1}},"required":["ar","en"]},{"type":"null"}]},"aspectRatio":{"type":"string","enum":["1:1","4:5","3:4","2:3","9:16","16:9","3:2","4:3","21:9"],"description":"Shape of the images; the result is cropped to it exactly"},"resolution":{"type":"string","enum":["1K","2K","4K"],"description":"Long side about 1,000, 2,000 or 4,000 pixels"},"count":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"background":{"type":"string","enum":["auto","transparent"],"description":"transparent = PNG with a clear background (tiers with transparent: true, plans with imageTransparent)"},"mode":{"type":"string","enum":["create","edit"],"description":"edit = made from reference photos or an earlier image"},"tool":{"anyOf":[{"type":"string","enum":["remove-background","enhance"],"description":"One-click tools: remove-background (the subject alone on a clear background, PNG) or enhance (the same photo sharper at 2K or 4K)"},{"type":"null"}],"description":"The one-click tool that made it, if any"},"references":{"type":"array","items":{"type":"object","properties":{"url":{"type":["string","null"]}},"required":["url"]}},"source":{"anyOf":[{"type":"object","properties":{"runId":{"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)$"},"index":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}},"required":["runId","index"]},{"type":"null"}]},"parentId":{"anyOf":[{"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)$"},{"type":"null"}]},"outputs":{"type":"array","items":{"type":"object","properties":{"index":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"status":{"type":"string","enum":["pending","ready","failed"]},"url":{"description":"The image (signed, inline)","type":["string","null"]},"downloadUrl":{"description":"The image as a named file download","type":["string","null"]},"thumbnailUrl":{"description":"A WebP preview, at most 640 pixels on the long side","type":["string","null"]},"width":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"height":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"mimeType":{"type":["string","null"]},"error":{"type":["string","null"]}},"required":["index","status","url","downloadUrl","thumbnailUrl","width","height","mimeType","error"]}},"creditsReserved":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"creditsCharged":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"generationId":{"anyOf":[{"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)$"},{"type":"null"}]},"clientId":{"anyOf":[{"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)$"},{"type":"null"}]},"finishedAt":{"type":["string","null"]}},"required":["id","createdAt","updatedAt","title","status","progress","error","prompt","tier","tierName","aspectRatio","resolution","count","background","mode","tool","references","source","parentId","outputs","creditsReserved","creditsCharged","generationId","clientId","finishedAt"],"additionalProperties":{}}},"nextCursor":{"type":["string","null"]}},"required":["items","nextCursor"]},"example":{"items":[{"id":"01990000-0000-7000-8000-000000000001","createdAt":"2026-09-19T12:00:00.000Z","updatedAt":"2026-09-19T12:00:00.000Z","data":{},"title":"example","status":"queued","progress":1,"error":"example","prompt":"مرحباً بك في فوكلا.","tier":"example","tierName":{"ar":"مثال","en":"example"},"aspectRatio":"1:1","resolution":"1K","count":-9007199254740991,"background":"auto","mode":"create","tool":"remove-background","references":[{"url":"example"}],"source":{"runId":"01990000-0000-7000-8000-000000000001","index":-9007199254740991},"parentId":"01990000-0000-7000-8000-000000000001","outputs":[{"index":-9007199254740991,"status":"pending","url":"example","downloadUrl":"http://localhost:4000/example","thumbnailUrl":"http://localhost:4000/example","width":-9007199254740991,"height":-9007199254740991,"mimeType":"example","error":"example"}],"creditsReserved":-9007199254740991,"creditsCharged":-9007199254740991,"generationId":"01990000-0000-7000-8000-000000000001","clientId":"01990000-0000-7000-8000-000000000001","finishedAt":"2026-09-19T12:00:00.000Z"}],"nextCursor":"example"}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/images","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/images","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/images","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/images","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/images","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/images","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/images","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/images","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/images","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/images","traceId":"request-id"}}}}}},"post":{"operationId":"createImageRun","tags":["Images"],"summary":"Make or edit images: credits for every image asked for are reserved, only the images made are charged. A 403 names the plan limit in errors[0].path","description":"Requires workspace role editor or above. Retry with the same Idempotency-Key and identical body. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"Idempotency-Key","in":"header","required":true,"schema":{"type":"string","maxLength":200},"example":"request-2026-001"},{"name":"X-CSRF-Token","in":"header","required":false,"description":"Required for cookie-authenticated mutations; returned by sign-in/sign-up.","schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"prompt":{"default":"","description":"What to make or change, in any language (at least 3 characters). Text to show in the image goes in quotes. Not used with `tool`","type":"string","maxLength":4000},"tool":{"description":"A one-click tool on one photo (`source` or one reference upload): the tier, the instruction and the price are the tool's own; prompt, tier, count and background are ignored","type":"string","enum":["remove-background","enhance"]},"tier":{"type":"string","minLength":1,"maxLength":100,"description":"Image quality tier slug (img-lite, img-standard, img-pro, img-ultra)"},"aspectRatio":{"default":"1:1","type":"string","enum":["1:1","4:5","3:4","2:3","9:16","16:9","3:2","4:3","21:9"],"description":"Shape of the images; the result is cropped to it exactly"},"resolution":{"default":"1K","description":"Only tiers listing more than one size take 2K or 4K","type":"string","enum":["1K","2K","4K"]},"count":{"default":1,"description":"Images to make (up to the plan imageBatch)","type":"integer","minimum":1,"maximum":4},"background":{"default":"auto","type":"string","enum":["auto","transparent"],"description":"transparent = PNG with a clear background (tiers with transparent: true, plans with imageTransparent)"},"referenceUploadIds":{"default":[],"description":"Validated image uploads (JPEG, PNG or WebP) the images are made from or edit, in the order the prompt names them","maxItems":16,"type":"array","items":{"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)$"}},"source":{"description":"Edit an image made earlier: it goes first, before the reference uploads, and the run is linked to it (the edit history)","type":"object","properties":{"runId":{"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)$"},"index":{"type":"integer","minimum":0,"maximum":3}},"required":["runId","index"]},"preset":{"description":"The studio preset the run started from (analytics only)","type":"string","maxLength":60},"title":{"type":"string","maxLength":120},"clientId":{"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)$"}},"required":["tier"]},"example":{"prompt":"","tool":"remove-background","tier":"example","aspectRatio":"1:1","resolution":"1K","count":1,"background":"auto","referenceUploadIds":[],"source":{"runId":"01990000-0000-7000-8000-000000000001","index":0},"preset":"example","title":"example","clientId":"01990000-0000-7000-8000-000000000001"}}}},"responses":{"202":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","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)$"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"},"data":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}},"title":{"type":"string"},"status":{"type":"string","enum":["queued","generating","ready","failed"],"description":"queued = waiting for a worker; generating = the model is drawing; ready = done (see each output); failed = nothing was made, refunded"},"progress":{"type":"number"},"error":{"description":"CONTENT_REJECTED (the model refused the prompt or a photo), CONTENT_BLOCKED (our policy), IMAGE_FAILED, PROVIDER_UNAVAILABLE","type":["string","null"]},"prompt":{"type":"string"},"tier":{"type":"string"},"tierName":{"anyOf":[{"type":"object","properties":{"ar":{"type":"string","minLength":1},"en":{"type":"string","minLength":1}},"required":["ar","en"]},{"type":"null"}]},"aspectRatio":{"type":"string","enum":["1:1","4:5","3:4","2:3","9:16","16:9","3:2","4:3","21:9"],"description":"Shape of the images; the result is cropped to it exactly"},"resolution":{"type":"string","enum":["1K","2K","4K"],"description":"Long side about 1,000, 2,000 or 4,000 pixels"},"count":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"background":{"type":"string","enum":["auto","transparent"],"description":"transparent = PNG with a clear background (tiers with transparent: true, plans with imageTransparent)"},"mode":{"type":"string","enum":["create","edit"],"description":"edit = made from reference photos or an earlier image"},"tool":{"anyOf":[{"type":"string","enum":["remove-background","enhance"],"description":"One-click tools: remove-background (the subject alone on a clear background, PNG) or enhance (the same photo sharper at 2K or 4K)"},{"type":"null"}],"description":"The one-click tool that made it, if any"},"references":{"type":"array","items":{"type":"object","properties":{"url":{"type":["string","null"]}},"required":["url"]}},"source":{"anyOf":[{"type":"object","properties":{"runId":{"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)$"},"index":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}},"required":["runId","index"]},{"type":"null"}]},"parentId":{"anyOf":[{"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)$"},{"type":"null"}]},"outputs":{"type":"array","items":{"type":"object","properties":{"index":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"status":{"type":"string","enum":["pending","ready","failed"]},"url":{"description":"The image (signed, inline)","type":["string","null"]},"downloadUrl":{"description":"The image as a named file download","type":["string","null"]},"thumbnailUrl":{"description":"A WebP preview, at most 640 pixels on the long side","type":["string","null"]},"width":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"height":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"mimeType":{"type":["string","null"]},"error":{"type":["string","null"]}},"required":["index","status","url","downloadUrl","thumbnailUrl","width","height","mimeType","error"]}},"creditsReserved":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"creditsCharged":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"generationId":{"anyOf":[{"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)$"},{"type":"null"}]},"clientId":{"anyOf":[{"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)$"},{"type":"null"}]},"finishedAt":{"type":["string","null"]}},"required":["id","createdAt","updatedAt","title","status","progress","error","prompt","tier","tierName","aspectRatio","resolution","count","background","mode","tool","references","source","parentId","outputs","creditsReserved","creditsCharged","generationId","clientId","finishedAt"],"additionalProperties":{}},"example":{"id":"01990000-0000-7000-8000-000000000001","createdAt":"2026-09-19T12:00:00.000Z","updatedAt":"2026-09-19T12:00:00.000Z","data":{},"title":"example","status":"queued","progress":1,"error":"example","prompt":"مرحباً بك في فوكلا.","tier":"example","tierName":{"ar":"مثال","en":"example"},"aspectRatio":"1:1","resolution":"1K","count":-9007199254740991,"background":"auto","mode":"create","tool":"remove-background","references":[{"url":"example"}],"source":{"runId":"01990000-0000-7000-8000-000000000001","index":-9007199254740991},"parentId":"01990000-0000-7000-8000-000000000001","outputs":[{"index":-9007199254740991,"status":"pending","url":"example","downloadUrl":"http://localhost:4000/example","thumbnailUrl":"http://localhost:4000/example","width":-9007199254740991,"height":-9007199254740991,"mimeType":"example","error":"example"}],"creditsReserved":-9007199254740991,"creditsCharged":-9007199254740991,"generationId":"01990000-0000-7000-8000-000000000001","clientId":"01990000-0000-7000-8000-000000000001","finishedAt":"2026-09-19T12:00:00.000Z"}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/images","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/images","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/images","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/images","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/images","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/images","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/images","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/images","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/images","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/images","traceId":"request-id"}}}}}}},"/v1/images/prompt-assist":{"post":{"operationId":"assistImagePrompt","tags":["Images"],"summary":"Rewrite a short idea into a detailed image prompt in the same language, keeping any quoted text exactly (no credits; rate limited)","description":"Requires workspace role editor or above. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"X-CSRF-Token","in":"header","required":false,"description":"Required for cookie-authenticated mutations; returned by sign-in/sign-up.","schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"prompt":{"type":"string","minLength":2,"maxLength":2000},"mode":{"default":"create","type":"string","enum":["create","edit"]},"preset":{"type":"string","maxLength":60}},"required":["prompt"]},"example":{"prompt":"مرحباً بك في فوكلا.","mode":"create","preset":"example"}}}},"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"prompt":{"type":"string"}},"required":["prompt"]},"example":{"prompt":"مرحباً بك في فوكلا."}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/images/prompt-assist","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/images/prompt-assist","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/images/prompt-assist","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/images/prompt-assist","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/images/prompt-assist","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/images/prompt-assist","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/images/prompt-assist","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/images/prompt-assist","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/images/prompt-assist","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/images/prompt-assist","traceId":"request-id"}}}}}}},"/v1/images/{id}":{"get":{"operationId":"getImageRun","tags":["Images"],"summary":"get Image Run","description":"Requires workspace role viewer or above. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","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)$"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"},"data":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}},"title":{"type":"string"},"status":{"type":"string","enum":["queued","generating","ready","failed"],"description":"queued = waiting for a worker; generating = the model is drawing; ready = done (see each output); failed = nothing was made, refunded"},"progress":{"type":"number"},"error":{"description":"CONTENT_REJECTED (the model refused the prompt or a photo), CONTENT_BLOCKED (our policy), IMAGE_FAILED, PROVIDER_UNAVAILABLE","type":["string","null"]},"prompt":{"type":"string"},"tier":{"type":"string"},"tierName":{"anyOf":[{"type":"object","properties":{"ar":{"type":"string","minLength":1},"en":{"type":"string","minLength":1}},"required":["ar","en"]},{"type":"null"}]},"aspectRatio":{"type":"string","enum":["1:1","4:5","3:4","2:3","9:16","16:9","3:2","4:3","21:9"],"description":"Shape of the images; the result is cropped to it exactly"},"resolution":{"type":"string","enum":["1K","2K","4K"],"description":"Long side about 1,000, 2,000 or 4,000 pixels"},"count":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"background":{"type":"string","enum":["auto","transparent"],"description":"transparent = PNG with a clear background (tiers with transparent: true, plans with imageTransparent)"},"mode":{"type":"string","enum":["create","edit"],"description":"edit = made from reference photos or an earlier image"},"tool":{"anyOf":[{"type":"string","enum":["remove-background","enhance"],"description":"One-click tools: remove-background (the subject alone on a clear background, PNG) or enhance (the same photo sharper at 2K or 4K)"},{"type":"null"}],"description":"The one-click tool that made it, if any"},"references":{"type":"array","items":{"type":"object","properties":{"url":{"type":["string","null"]}},"required":["url"]}},"source":{"anyOf":[{"type":"object","properties":{"runId":{"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)$"},"index":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}},"required":["runId","index"]},{"type":"null"}]},"parentId":{"anyOf":[{"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)$"},{"type":"null"}]},"outputs":{"type":"array","items":{"type":"object","properties":{"index":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"status":{"type":"string","enum":["pending","ready","failed"]},"url":{"description":"The image (signed, inline)","type":["string","null"]},"downloadUrl":{"description":"The image as a named file download","type":["string","null"]},"thumbnailUrl":{"description":"A WebP preview, at most 640 pixels on the long side","type":["string","null"]},"width":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"height":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"mimeType":{"type":["string","null"]},"error":{"type":["string","null"]}},"required":["index","status","url","downloadUrl","thumbnailUrl","width","height","mimeType","error"]}},"creditsReserved":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"creditsCharged":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"generationId":{"anyOf":[{"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)$"},{"type":"null"}]},"clientId":{"anyOf":[{"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)$"},{"type":"null"}]},"finishedAt":{"type":["string","null"]}},"required":["id","createdAt","updatedAt","title","status","progress","error","prompt","tier","tierName","aspectRatio","resolution","count","background","mode","tool","references","source","parentId","outputs","creditsReserved","creditsCharged","generationId","clientId","finishedAt"],"additionalProperties":{}},"example":{"id":"01990000-0000-7000-8000-000000000001","createdAt":"2026-09-19T12:00:00.000Z","updatedAt":"2026-09-19T12:00:00.000Z","data":{},"title":"example","status":"queued","progress":1,"error":"example","prompt":"مرحباً بك في فوكلا.","tier":"example","tierName":{"ar":"مثال","en":"example"},"aspectRatio":"1:1","resolution":"1K","count":-9007199254740991,"background":"auto","mode":"create","tool":"remove-background","references":[{"url":"example"}],"source":{"runId":"01990000-0000-7000-8000-000000000001","index":-9007199254740991},"parentId":"01990000-0000-7000-8000-000000000001","outputs":[{"index":-9007199254740991,"status":"pending","url":"example","downloadUrl":"http://localhost:4000/example","thumbnailUrl":"http://localhost:4000/example","width":-9007199254740991,"height":-9007199254740991,"mimeType":"example","error":"example"}],"creditsReserved":-9007199254740991,"creditsCharged":-9007199254740991,"generationId":"01990000-0000-7000-8000-000000000001","clientId":"01990000-0000-7000-8000-000000000001","finishedAt":"2026-09-19T12:00:00.000Z"}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/images/{id}","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/images/{id}","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/images/{id}","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/images/{id}","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/images/{id}","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/images/{id}","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/images/{id}","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/images/{id}","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/images/{id}","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/images/{id}","traceId":"request-id"}}}}}},"patch":{"operationId":"updateImageRun","tags":["Images"],"summary":"update Image Run","description":"Requires workspace role editor or above. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"X-CSRF-Token","in":"header","required":false,"description":"Required for cookie-authenticated mutations; returned by sign-in/sign-up.","schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"title":{"type":"string","minLength":1,"maxLength":120}},"required":["title"]},"example":{"title":"example"}}}},"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","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)$"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"},"data":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}},"title":{"type":"string"},"status":{"type":"string","enum":["queued","generating","ready","failed"],"description":"queued = waiting for a worker; generating = the model is drawing; ready = done (see each output); failed = nothing was made, refunded"},"progress":{"type":"number"},"error":{"description":"CONTENT_REJECTED (the model refused the prompt or a photo), CONTENT_BLOCKED (our policy), IMAGE_FAILED, PROVIDER_UNAVAILABLE","type":["string","null"]},"prompt":{"type":"string"},"tier":{"type":"string"},"tierName":{"anyOf":[{"type":"object","properties":{"ar":{"type":"string","minLength":1},"en":{"type":"string","minLength":1}},"required":["ar","en"]},{"type":"null"}]},"aspectRatio":{"type":"string","enum":["1:1","4:5","3:4","2:3","9:16","16:9","3:2","4:3","21:9"],"description":"Shape of the images; the result is cropped to it exactly"},"resolution":{"type":"string","enum":["1K","2K","4K"],"description":"Long side about 1,000, 2,000 or 4,000 pixels"},"count":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"background":{"type":"string","enum":["auto","transparent"],"description":"transparent = PNG with a clear background (tiers with transparent: true, plans with imageTransparent)"},"mode":{"type":"string","enum":["create","edit"],"description":"edit = made from reference photos or an earlier image"},"tool":{"anyOf":[{"type":"string","enum":["remove-background","enhance"],"description":"One-click tools: remove-background (the subject alone on a clear background, PNG) or enhance (the same photo sharper at 2K or 4K)"},{"type":"null"}],"description":"The one-click tool that made it, if any"},"references":{"type":"array","items":{"type":"object","properties":{"url":{"type":["string","null"]}},"required":["url"]}},"source":{"anyOf":[{"type":"object","properties":{"runId":{"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)$"},"index":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}},"required":["runId","index"]},{"type":"null"}]},"parentId":{"anyOf":[{"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)$"},{"type":"null"}]},"outputs":{"type":"array","items":{"type":"object","properties":{"index":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"status":{"type":"string","enum":["pending","ready","failed"]},"url":{"description":"The image (signed, inline)","type":["string","null"]},"downloadUrl":{"description":"The image as a named file download","type":["string","null"]},"thumbnailUrl":{"description":"A WebP preview, at most 640 pixels on the long side","type":["string","null"]},"width":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"height":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"mimeType":{"type":["string","null"]},"error":{"type":["string","null"]}},"required":["index","status","url","downloadUrl","thumbnailUrl","width","height","mimeType","error"]}},"creditsReserved":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"creditsCharged":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"generationId":{"anyOf":[{"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)$"},{"type":"null"}]},"clientId":{"anyOf":[{"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)$"},{"type":"null"}]},"finishedAt":{"type":["string","null"]}},"required":["id","createdAt","updatedAt","title","status","progress","error","prompt","tier","tierName","aspectRatio","resolution","count","background","mode","tool","references","source","parentId","outputs","creditsReserved","creditsCharged","generationId","clientId","finishedAt"],"additionalProperties":{}},"example":{"id":"01990000-0000-7000-8000-000000000001","createdAt":"2026-09-19T12:00:00.000Z","updatedAt":"2026-09-19T12:00:00.000Z","data":{},"title":"example","status":"queued","progress":1,"error":"example","prompt":"مرحباً بك في فوكلا.","tier":"example","tierName":{"ar":"مثال","en":"example"},"aspectRatio":"1:1","resolution":"1K","count":-9007199254740991,"background":"auto","mode":"create","tool":"remove-background","references":[{"url":"example"}],"source":{"runId":"01990000-0000-7000-8000-000000000001","index":-9007199254740991},"parentId":"01990000-0000-7000-8000-000000000001","outputs":[{"index":-9007199254740991,"status":"pending","url":"example","downloadUrl":"http://localhost:4000/example","thumbnailUrl":"http://localhost:4000/example","width":-9007199254740991,"height":-9007199254740991,"mimeType":"example","error":"example"}],"creditsReserved":-9007199254740991,"creditsCharged":-9007199254740991,"generationId":"01990000-0000-7000-8000-000000000001","clientId":"01990000-0000-7000-8000-000000000001","finishedAt":"2026-09-19T12:00:00.000Z"}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/images/{id}","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/images/{id}","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/images/{id}","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/images/{id}","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/images/{id}","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/images/{id}","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/images/{id}","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/images/{id}","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/images/{id}","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/images/{id}","traceId":"request-id"}}}}}},"delete":{"operationId":"deleteImageRun","tags":["Images"],"summary":"Delete the run and its images (one in progress is cancelled and its credits released)","description":"Requires workspace role editor or above. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"X-CSRF-Token","in":"header","required":false,"description":"Required for cookie-authenticated mutations; returned by sign-in/sign-up.","schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"ok":{"type":"boolean"}},"required":["ok"]},"example":{"ok":true}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/images/{id}","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/images/{id}","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/images/{id}","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/images/{id}","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/images/{id}","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/images/{id}","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/images/{id}","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/images/{id}","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/images/{id}","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/images/{id}","traceId":"request-id"}}}}}}},"/v1/images/{id}/retry":{"post":{"operationId":"retryImageRun","tags":["Images"],"summary":"Run a failed run again with the same prompt, photos and settings (its credits were refunded; they are reserved again)","description":"Requires workspace role editor or above. Retry with the same Idempotency-Key and identical body. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"Idempotency-Key","in":"header","required":true,"schema":{"type":"string","maxLength":200},"example":"request-2026-001"},{"name":"X-CSRF-Token","in":"header","required":false,"description":"Required for cookie-authenticated mutations; returned by sign-in/sign-up.","schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"responses":{"202":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","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)$"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"},"data":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}},"title":{"type":"string"},"status":{"type":"string","enum":["queued","generating","ready","failed"],"description":"queued = waiting for a worker; generating = the model is drawing; ready = done (see each output); failed = nothing was made, refunded"},"progress":{"type":"number"},"error":{"description":"CONTENT_REJECTED (the model refused the prompt or a photo), CONTENT_BLOCKED (our policy), IMAGE_FAILED, PROVIDER_UNAVAILABLE","type":["string","null"]},"prompt":{"type":"string"},"tier":{"type":"string"},"tierName":{"anyOf":[{"type":"object","properties":{"ar":{"type":"string","minLength":1},"en":{"type":"string","minLength":1}},"required":["ar","en"]},{"type":"null"}]},"aspectRatio":{"type":"string","enum":["1:1","4:5","3:4","2:3","9:16","16:9","3:2","4:3","21:9"],"description":"Shape of the images; the result is cropped to it exactly"},"resolution":{"type":"string","enum":["1K","2K","4K"],"description":"Long side about 1,000, 2,000 or 4,000 pixels"},"count":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"background":{"type":"string","enum":["auto","transparent"],"description":"transparent = PNG with a clear background (tiers with transparent: true, plans with imageTransparent)"},"mode":{"type":"string","enum":["create","edit"],"description":"edit = made from reference photos or an earlier image"},"tool":{"anyOf":[{"type":"string","enum":["remove-background","enhance"],"description":"One-click tools: remove-background (the subject alone on a clear background, PNG) or enhance (the same photo sharper at 2K or 4K)"},{"type":"null"}],"description":"The one-click tool that made it, if any"},"references":{"type":"array","items":{"type":"object","properties":{"url":{"type":["string","null"]}},"required":["url"]}},"source":{"anyOf":[{"type":"object","properties":{"runId":{"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)$"},"index":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}},"required":["runId","index"]},{"type":"null"}]},"parentId":{"anyOf":[{"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)$"},{"type":"null"}]},"outputs":{"type":"array","items":{"type":"object","properties":{"index":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"status":{"type":"string","enum":["pending","ready","failed"]},"url":{"description":"The image (signed, inline)","type":["string","null"]},"downloadUrl":{"description":"The image as a named file download","type":["string","null"]},"thumbnailUrl":{"description":"A WebP preview, at most 640 pixels on the long side","type":["string","null"]},"width":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"height":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"mimeType":{"type":["string","null"]},"error":{"type":["string","null"]}},"required":["index","status","url","downloadUrl","thumbnailUrl","width","height","mimeType","error"]}},"creditsReserved":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"creditsCharged":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"generationId":{"anyOf":[{"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)$"},{"type":"null"}]},"clientId":{"anyOf":[{"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)$"},{"type":"null"}]},"finishedAt":{"type":["string","null"]}},"required":["id","createdAt","updatedAt","title","status","progress","error","prompt","tier","tierName","aspectRatio","resolution","count","background","mode","tool","references","source","parentId","outputs","creditsReserved","creditsCharged","generationId","clientId","finishedAt"],"additionalProperties":{}},"example":{"id":"01990000-0000-7000-8000-000000000001","createdAt":"2026-09-19T12:00:00.000Z","updatedAt":"2026-09-19T12:00:00.000Z","data":{},"title":"example","status":"queued","progress":1,"error":"example","prompt":"مرحباً بك في فوكلا.","tier":"example","tierName":{"ar":"مثال","en":"example"},"aspectRatio":"1:1","resolution":"1K","count":-9007199254740991,"background":"auto","mode":"create","tool":"remove-background","references":[{"url":"example"}],"source":{"runId":"01990000-0000-7000-8000-000000000001","index":-9007199254740991},"parentId":"01990000-0000-7000-8000-000000000001","outputs":[{"index":-9007199254740991,"status":"pending","url":"example","downloadUrl":"http://localhost:4000/example","thumbnailUrl":"http://localhost:4000/example","width":-9007199254740991,"height":-9007199254740991,"mimeType":"example","error":"example"}],"creditsReserved":-9007199254740991,"creditsCharged":-9007199254740991,"generationId":"01990000-0000-7000-8000-000000000001","clientId":"01990000-0000-7000-8000-000000000001","finishedAt":"2026-09-19T12:00:00.000Z"}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/images/{id}/retry","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/images/{id}/retry","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/images/{id}/retry","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/images/{id}/retry","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/images/{id}/retry","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/images/{id}/retry","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/images/{id}/retry","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/images/{id}/retry","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/images/{id}/retry","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/images/{id}/retry","traceId":"request-id"}}}}}}},"/v1/public/video/templates":{"get":{"operationId":"publicVideoTemplates","tags":["Landing"],"summary":"Published video templates with absolute media URLs and the categories; cached a minute. The app and the landing both read this","description":"Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."}],"security":[],"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"items":{"type":"array","items":{"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)$"},"slug":{"type":"string"},"slugAr":{"type":["string","null"]},"title":{"type":"object","properties":{"ar":{"type":"string"},"en":{"type":"string"}},"required":["ar","en"]},"description":{"type":"object","properties":{"ar":{"type":"string"},"en":{"type":"string"}},"required":["ar","en"]},"category":{"type":"string","description":"Category slug"},"keywords":{"type":"object","properties":{"ar":{"type":"array","items":{"type":"string"}},"en":{"type":"array","items":{"type":"string"}}},"required":["ar","en"],"description":"Search phrases people use for this trend, per language"},"seo":{"type":"object","properties":{"title":{"type":"object","properties":{"ar":{"type":"string"},"en":{"type":"string"}}},"description":{"type":"object","properties":{"ar":{"type":"string"},"en":{"type":"string"}}}},"required":["title","description"],"description":"Page title and description overrides (empty = made from the title and description)"},"operation":{"type":"string","enum":["add","replace"],"description":"replace = swap the people or objects of the clip for the ones in the photos; add = put what the photos show into the clip"},"slots":{"type":"array","items":{"type":"object","properties":{"label":{"type":"object","properties":{"ar":{"type":"string","maxLength":60},"en":{"type":"string","maxLength":60}},"required":["ar","en"]},"hint":{"type":"object","properties":{"ar":{"type":"string","maxLength":160},"en":{"type":"string","maxLength":160}}}},"required":["label"]},"description":"The photos the person gives, in order"},"badge":{"anyOf":[{"type":"string","enum":["new","trending","hot","viral"]},{"type":"null"}]},"featured":{"type":"boolean"},"durationSeconds":{"type":"number"},"width":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"height":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"aspect":{"type":"string","enum":["9:16","16:9","1:1"]},"hasAudio":{"type":"boolean"},"clip":{"type":"object","properties":{"url":{"type":"string"},"poster":{"type":["string","null"]}},"required":["url","poster"],"description":"The template clip (what gets edited)"},"preview":{"anyOf":[{"type":"object","properties":{"url":{"type":"string"},"poster":{"type":["string","null"]}},"required":["url","poster"]},{"type":"null"}],"description":"An example result, shown first when there is one"},"picture":{"description":"The photo used for the example result","type":["string","null"]},"uses":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Edits made from the template"},"defaultTier":{"type":["string","null"]},"publishedAt":{"type":["string","null"]},"updatedAt":{"type":"string"}},"required":["id","slug","slugAr","title","description","category","keywords","seo","operation","slots","badge","featured","durationSeconds","width","height","aspect","hasAudio","clip","preview","picture","uses","defaultTier","publishedAt","updatedAt"]},"description":"Published templates: featured first, then the back office order, then newest"},"categories":{"type":"array","items":{"type":"object","properties":{"slug":{"type":"string","minLength":2,"maxLength":80,"pattern":"^[a-z0-9]+(?:-[a-z0-9]+)*$"},"name":{"type":"object","properties":{"ar":{"type":"string","minLength":1},"en":{"type":"string","minLength":1}},"required":["ar","en"]},"description":{"type":"object","properties":{"ar":{"type":"string","maxLength":300},"en":{"type":"string","maxLength":300}}},"count":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}},"required":["slug","name","count"]},"description":"Every category, in the back office order, with its number of published templates"},"updatedAt":{"type":["string","null"]}},"required":["items","categories","updatedAt"]},"example":{"items":[{"id":"01990000-0000-7000-8000-000000000001","slug":"example","slugAr":"example","title":{"ar":"مثال","en":"example"},"description":{"ar":"مثال","en":"example"},"category":"example","keywords":{"ar":["example"],"en":["example"]},"seo":{"title":{"ar":"مثال","en":"example"},"description":{"ar":"مثال","en":"example"}},"operation":"add","slots":[{"label":{"ar":"مثال","en":"example"},"hint":{"ar":"مثال","en":"example"}}],"badge":"new","featured":true,"durationSeconds":1,"width":-9007199254740991,"height":-9007199254740991,"aspect":"9:16","hasAudio":true,"clip":{"url":"example","poster":"example"},"preview":{"url":"example","poster":"example"},"picture":"example","uses":-9007199254740991,"defaultTier":"example","publishedAt":"2026-09-19T12:00:00.000Z","updatedAt":"2026-09-19T12:00:00.000Z"}],"categories":[{"slug":"example","name":{"ar":"مثال","en":"example"},"description":{"ar":"مثال","en":"example"},"count":-9007199254740991}],"updatedAt":"2026-09-19T12:00:00.000Z"}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/public/video/templates","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/public/video/templates","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/public/video/templates","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / CHALLENGE_FAILED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/public/video/templates","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/public/video/templates","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/public/video/templates","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/public/video/templates","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/public/video/templates","traceId":"request-id"}}},"headers":{"Retry-After":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the limiting window resets."}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/public/video/templates","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE / CHALLENGE_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/public/video/templates","traceId":"request-id"}}},"headers":{"Retry-After":{"schema":{"type":"integer","minimum":1},"description":"Suggested delay before retrying."}}}}}},"/v1/public/video/templates/{slug}":{"get":{"operationId":"publicVideoTemplate","tags":["Landing"],"summary":"One published template by its slug (or its Arabic slug)","description":"Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"slug","in":"path","required":true,"schema":{"type":"string"}}],"security":[],"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","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)$"},"slug":{"type":"string"},"slugAr":{"type":["string","null"]},"title":{"type":"object","properties":{"ar":{"type":"string"},"en":{"type":"string"}},"required":["ar","en"]},"description":{"type":"object","properties":{"ar":{"type":"string"},"en":{"type":"string"}},"required":["ar","en"]},"category":{"type":"string","description":"Category slug"},"keywords":{"type":"object","properties":{"ar":{"type":"array","items":{"type":"string"}},"en":{"type":"array","items":{"type":"string"}}},"required":["ar","en"],"description":"Search phrases people use for this trend, per language"},"seo":{"type":"object","properties":{"title":{"type":"object","properties":{"ar":{"type":"string"},"en":{"type":"string"}}},"description":{"type":"object","properties":{"ar":{"type":"string"},"en":{"type":"string"}}}},"required":["title","description"],"description":"Page title and description overrides (empty = made from the title and description)"},"operation":{"type":"string","enum":["add","replace"],"description":"replace = swap the people or objects of the clip for the ones in the photos; add = put what the photos show into the clip"},"slots":{"type":"array","items":{"type":"object","properties":{"label":{"type":"object","properties":{"ar":{"type":"string","maxLength":60},"en":{"type":"string","maxLength":60}},"required":["ar","en"]},"hint":{"type":"object","properties":{"ar":{"type":"string","maxLength":160},"en":{"type":"string","maxLength":160}}}},"required":["label"]},"description":"The photos the person gives, in order"},"badge":{"anyOf":[{"type":"string","enum":["new","trending","hot","viral"]},{"type":"null"}]},"featured":{"type":"boolean"},"durationSeconds":{"type":"number"},"width":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"height":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"aspect":{"type":"string","enum":["9:16","16:9","1:1"]},"hasAudio":{"type":"boolean"},"clip":{"type":"object","properties":{"url":{"type":"string"},"poster":{"type":["string","null"]}},"required":["url","poster"],"description":"The template clip (what gets edited)"},"preview":{"anyOf":[{"type":"object","properties":{"url":{"type":"string"},"poster":{"type":["string","null"]}},"required":["url","poster"]},{"type":"null"}],"description":"An example result, shown first when there is one"},"picture":{"description":"The photo used for the example result","type":["string","null"]},"uses":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Edits made from the template"},"defaultTier":{"type":["string","null"]},"publishedAt":{"type":["string","null"]},"updatedAt":{"type":"string"}},"required":["id","slug","slugAr","title","description","category","keywords","seo","operation","slots","badge","featured","durationSeconds","width","height","aspect","hasAudio","clip","preview","picture","uses","defaultTier","publishedAt","updatedAt"]},"example":{"id":"01990000-0000-7000-8000-000000000001","slug":"example","slugAr":"example","title":{"ar":"مثال","en":"example"},"description":{"ar":"مثال","en":"example"},"category":"example","keywords":{"ar":["example"],"en":["example"]},"seo":{"title":{"ar":"مثال","en":"example"},"description":{"ar":"مثال","en":"example"}},"operation":"add","slots":[{"label":{"ar":"مثال","en":"example"},"hint":{"ar":"مثال","en":"example"}}],"badge":"new","featured":true,"durationSeconds":1,"width":-9007199254740991,"height":-9007199254740991,"aspect":"9:16","hasAudio":true,"clip":{"url":"example","poster":"example"},"preview":{"url":"example","poster":"example"},"picture":"example","uses":-9007199254740991,"defaultTier":"example","publishedAt":"2026-09-19T12:00:00.000Z","updatedAt":"2026-09-19T12:00:00.000Z"}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/public/video/templates/{slug}","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/public/video/templates/{slug}","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/public/video/templates/{slug}","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / CHALLENGE_FAILED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/public/video/templates/{slug}","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/public/video/templates/{slug}","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/public/video/templates/{slug}","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/public/video/templates/{slug}","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/public/video/templates/{slug}","traceId":"request-id"}}},"headers":{"Retry-After":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the limiting window resets."}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/public/video/templates/{slug}","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE / CHALLENGE_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/public/video/templates/{slug}","traceId":"request-id"}}},"headers":{"Retry-After":{"schema":{"type":"integer","minimum":1},"description":"Suggested delay before retrying."}}}}}},"/v1/webhooks/higgsfield/{id}/{token}":{"post":{"operationId":"higgsfieldWebhook","tags":["Video edit"],"summary":"Higgsfield request webhook for one edit: the token in the path is checked, the payload is not trusted (the edit is polled at once)","description":"Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"token","in":"path","required":true,"schema":{"type":"string"}}],"security":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","propertyNames":{"type":"string"},"additionalProperties":{}},"example":{}}}},"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"ok":{"type":"boolean"}},"required":["ok"]},"example":{"ok":true}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/webhooks/higgsfield/{id}/{token}","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/webhooks/higgsfield/{id}/{token}","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/webhooks/higgsfield/{id}/{token}","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/webhooks/higgsfield/{id}/{token}","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/webhooks/higgsfield/{id}/{token}","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/webhooks/higgsfield/{id}/{token}","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/webhooks/higgsfield/{id}/{token}","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/webhooks/higgsfield/{id}/{token}","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/webhooks/higgsfield/{id}/{token}","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/webhooks/higgsfield/{id}/{token}","traceId":"request-id"}}}}}}},"/v1/voices/{id}/clone/retry":{"post":{"operationId":"retryVoiceClone","tags":["Explore voices"],"summary":"retry Voice Clone","description":"Requires workspace role editor or above. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"X-CSRF-Token","in":"header","required":false,"description":"Required for cookie-authenticated mutations; returned by sign-in/sign-up.","schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"ok":{"type":"boolean"}},"required":["ok"]},"example":{"ok":true}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/voices/{id}/clone/retry","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/voices/{id}/clone/retry","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/voices/{id}/clone/retry","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/voices/{id}/clone/retry","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/voices/{id}/clone/retry","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/voices/{id}/clone/retry","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/voices/{id}/clone/retry","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/voices/{id}/clone/retry","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/voices/{id}/clone/retry","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/voices/{id}/clone/retry","traceId":"request-id"}}}}}}},"/v1/collections":{"get":{"operationId":"listCollections","tags":["Explore voices"],"summary":"list Collections","description":"Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"cursor","in":"query","required":false,"schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"schema":{"default":25,"type":"integer","minimum":1,"maximum":100}},{"name":"q","in":"query","required":false,"schema":{"type":"string","maxLength":200}}],"security":[],"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"items":{"type":"array","items":{"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)$"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"},"data":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}},"name":{"type":"object","properties":{"ar":{"type":"string","minLength":1},"en":{"type":"string","minLength":1}},"required":["ar","en"]},"description":{"type":"object","properties":{"ar":{"type":"string","minLength":1},"en":{"type":"string","minLength":1}},"required":["ar","en"]},"voiceCount":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}},"required":["id","createdAt","updatedAt","name","description","voiceCount"],"additionalProperties":{}}},"nextCursor":{"type":["string","null"]}},"required":["items","nextCursor"]},"example":{"items":[{"id":"01990000-0000-7000-8000-000000000001","createdAt":"2026-09-19T12:00:00.000Z","updatedAt":"2026-09-19T12:00:00.000Z","data":{},"name":{"ar":"مثال","en":"example"},"description":{"ar":"مثال","en":"example"},"voiceCount":-9007199254740991}],"nextCursor":"example"}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/collections","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/collections","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/collections","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/collections","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/collections","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/collections","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/collections","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/collections","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/collections","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/collections","traceId":"request-id"}}}}}}},"/v1/collections/{id}":{"get":{"operationId":"getCollection","tags":["Explore voices"],"summary":"get Collection","description":"Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"security":[],"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","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)$"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"},"data":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}},"name":{"type":"object","properties":{"ar":{"type":"string","minLength":1},"en":{"type":"string","minLength":1}},"required":["ar","en"]},"description":{"type":"object","properties":{"ar":{"type":"string","minLength":1},"en":{"type":"string","minLength":1}},"required":["ar","en"]},"voiceCount":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"items":{"type":"array","items":{"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)$"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"},"data":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}}},"required":["id","createdAt","updatedAt"],"additionalProperties":{}}}},"required":["id","createdAt","updatedAt","name","description","voiceCount","items"],"additionalProperties":{}},"example":{"id":"01990000-0000-7000-8000-000000000001","createdAt":"2026-09-19T12:00:00.000Z","updatedAt":"2026-09-19T12:00:00.000Z","data":{},"name":{"ar":"مثال","en":"example"},"description":{"ar":"مثال","en":"example"},"voiceCount":-9007199254740991,"items":[{"id":"01990000-0000-7000-8000-000000000001","createdAt":"2026-09-19T12:00:00.000Z","updatedAt":"2026-09-19T12:00:00.000Z","data":{}}]}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/collections/{id}","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/collections/{id}","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/collections/{id}","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/collections/{id}","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/collections/{id}","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/collections/{id}","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/collections/{id}","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/collections/{id}","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/collections/{id}","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/collections/{id}","traceId":"request-id"}}}}}}},"/v1/voice-designs":{"post":{"operationId":"createVoiceDesign","tags":["Explore voices"],"summary":"create Voice Design","description":"Requires workspace role editor or above. Retry with the same Idempotency-Key and identical body. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"Idempotency-Key","in":"header","required":true,"schema":{"type":"string","maxLength":200},"example":"request-2026-001"},{"name":"X-CSRF-Token","in":"header","required":false,"description":"Required for cookie-authenticated mutations; returned by sign-in/sign-up.","schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"prompt":{"type":"string","minLength":1,"maxLength":2000},"locale":{"default":"ar-SA","type":"string"},"productModelId":{"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)$"},"params":{"default":{"speed":50,"consistency":50,"voiceMatch":75,"expressiveness":50,"clarity":75,"energyMode":"normal"},"type":"object","properties":{"speed":{"default":50,"type":"number","minimum":0,"maximum":100},"consistency":{"default":50,"type":"number","minimum":0,"maximum":100},"voiceMatch":{"default":75,"type":"number","minimum":0,"maximum":100},"expressiveness":{"default":50,"type":"number","minimum":0,"maximum":100},"clarity":{"default":75,"type":"number","minimum":0,"maximum":100},"energyMode":{"default":"normal","type":"string","enum":["normal","boost"]}}},"adaptFrom":{"anyOf":[{"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)$"},{"maxItems":5,"type":"array","items":{"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)$"}}]},"gender":{"type":"string","enum":["male","female","neutral"]},"age":{"type":"string","enum":["young","adult","middle-aged","senior"]},"accent":{"type":"string","maxLength":100},"languages":{"maxItems":20,"type":"array","items":{"type":"string"}},"previewText":{"type":"string","maxLength":2000}},"required":["prompt","productModelId"]},"example":{"prompt":"مرحباً بك في فوكلا.","locale":"ar-SA","productModelId":"01990000-0000-7000-8000-000000000001","params":{"speed":50,"consistency":50,"voiceMatch":75,"expressiveness":50,"clarity":75,"energyMode":"normal"},"adaptFrom":"01990000-0000-7000-8000-000000000001","gender":"male","age":"young","accent":"example","languages":["example"],"previewText":"example"}}}},"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","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)$"},"type":{"type":"string","enum":["tts","voice-change","music","sfx","clean","dub","lyric-edit","voice-design","assistant","dialogue","captions","video"]},"dialogue":{"description":"For dialogue generations: the script with each line's timing in the mixed file","anyOf":[{"type":"object","properties":{"lines":{"type":"array","items":{"type":"object","properties":{"speaker":{"type":"string","minLength":1,"maxLength":40,"description":"Speaker label as written in the script, e.g. Host"},"voiceId":{"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)$"},"text":{"type":"string","minLength":1,"maxLength":2000},"style":{"description":"Delivery hint, e.g. excited, whisper","type":"string","maxLength":40},"pauseAfter":{"description":"Seconds of silence after this line; default = the dialogue gap","type":"number","minimum":0,"maximum":5},"start":{"type":["number","null"]},"end":{"type":["number","null"]}},"required":["speaker","voiceId","text","start","end"]}},"speakers":{"type":"array","items":{"type":"object","properties":{"speaker":{"type":"string"},"voiceId":{"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)$"}},"required":["speaker","voiceId"]}}},"required":["lines","speakers"]},{"type":"null"}]},"clientId":{"anyOf":[{"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)$"},{"type":"null"}]},"approval":{"description":"Latest review of this generation","anyOf":[{"type":"object","properties":{"status":{"type":"string","enum":["pending","approved","changes_requested","cancelled"]},"reviewId":{"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)$"}},"required":["status","reviewId"]},{"type":"null"}]},"status":{"type":"string","enum":["queued","running","succeeded","failed","cancelled"]},"progress":{"type":"number"},"creditsReserved":{"type":"number"},"creditsCharged":{"type":"number"},"assetUrl":{"type":["string","null"]},"peaks":{"type":"array","items":{"type":"number"}},"errorCode":{"type":["string","null"]},"voice":{"anyOf":[{"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)$"},"name":{"type":"object","properties":{"ar":{"type":"string","minLength":1},"en":{"type":"string","minLength":1}},"required":["ar","en"]},"category":{"type":"string"}},"required":["id","name","category"]},{"type":"null"}]},"downloads":{"description":"Signed links per format that download a named file (Content-Disposition attachment); play `assetUrl` / `video.url` instead","type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"string"}},"mediaKind":{"description":"What the output plays as: a video (MP4) or audio","type":"string","enum":["audio","video"]},"video":{"description":"Set when the output is a video: what the player needs","anyOf":[{"type":"object","properties":{"url":{"type":"string","description":"Inline MP4 URL for playback"},"posterUrl":{"description":"Poster / first frame (JPEG) when one was made","type":["string","null"]},"aspectRatio":{"type":"string","enum":["9:16","16:9","1:1"]},"width":{"type":["number","null"]},"height":{"type":["number","null"]},"duration":{"type":["number","null"]},"projectId":{"anyOf":[{"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)$"},{"type":"null"}],"description":"The Vocla Video project it was rendered from"}},"required":["url","posterUrl","aspectRatio","width","height","duration","projectId"]},{"type":"null"}]},"sourceName":{"type":["string","null"]},"songId":{"anyOf":[{"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)$"},{"type":"null"}]},"songVersionId":{"anyOf":[{"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)$"},{"type":"null"}]},"assistantResponse":{"anyOf":[{"type":"object","properties":{"text":{"type":"string"},"transcript":{"type":"string"},"mode":{"type":"string","enum":["text","audio","realtime"]}},"required":["text","transcript","mode"]},{"type":"null"}]},"input":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}},"createdAt":{"type":"string"},"updatedAt":{"type":"string"}},"required":["id","type","status","progress","creditsReserved","creditsCharged","createdAt","updatedAt"],"additionalProperties":{}},"example":{"id":"01990000-0000-7000-8000-000000000001","type":"tts","dialogue":{"lines":[{"speaker":"example","voiceId":"01990000-0000-7000-8000-000000000001","text":"مرحباً بك في فوكلا.","style":"example","pauseAfter":0,"start":"example","end":"example"}],"speakers":[{"speaker":"example","voiceId":"01990000-0000-7000-8000-000000000001"}]},"clientId":"01990000-0000-7000-8000-000000000001","approval":{"status":"pending","reviewId":"01990000-0000-7000-8000-000000000001"},"status":"queued","progress":1,"creditsReserved":1,"creditsCharged":1,"assetUrl":"http://localhost:4000/example","peaks":[1],"errorCode":"example","voice":{"id":"01990000-0000-7000-8000-000000000001","name":{"ar":"مثال","en":"example"},"category":"example"},"downloads":{},"mediaKind":"audio","video":{"url":"example","posterUrl":"http://localhost:4000/example","aspectRatio":"9:16","width":"example","height":"example","duration":"example","projectId":"01990000-0000-7000-8000-000000000001"},"sourceName":"example","songId":"01990000-0000-7000-8000-000000000001","songVersionId":"01990000-0000-7000-8000-000000000001","assistantResponse":{"text":"مرحباً بك في فوكلا.","transcript":"example","mode":"text"},"input":{},"createdAt":"2026-09-19T12:00:00.000Z","updatedAt":"2026-09-19T12:00:00.000Z"}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/voice-designs","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/voice-designs","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/voice-designs","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/voice-designs","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/voice-designs","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/voice-designs","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/voice-designs","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/voice-designs","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/voice-designs","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/voice-designs","traceId":"request-id"}}}}}}},"/v1/voice-designs/{id}":{"get":{"operationId":"getVoiceDesign","tags":["Explore voices"],"summary":"get Voice Design","description":"Requires workspace role viewer or above. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","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)$"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"},"data":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}}},"required":["id","createdAt","updatedAt"],"additionalProperties":{}},"example":{"id":"01990000-0000-7000-8000-000000000001","createdAt":"2026-09-19T12:00:00.000Z","updatedAt":"2026-09-19T12:00:00.000Z","data":{}}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/voice-designs/{id}","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/voice-designs/{id}","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/voice-designs/{id}","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/voice-designs/{id}","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/voice-designs/{id}","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/voice-designs/{id}","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/voice-designs/{id}","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/voice-designs/{id}","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/voice-designs/{id}","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/voice-designs/{id}","traceId":"request-id"}}}}}}},"/v1/voice-designs/{id}/save":{"post":{"operationId":"saveVoiceDesign","tags":["Explore voices"],"summary":"save Voice Design","description":"Requires workspace role editor or above. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"X-CSRF-Token","in":"header","required":false,"description":"Required for cookie-authenticated mutations; returned by sign-in/sign-up.","schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"candidateId":{"type":"string","minLength":1,"maxLength":200},"name":{"type":"object","properties":{"ar":{"type":"string","minLength":1},"en":{"type":"string","minLength":1}},"required":["ar","en"]},"description":{"type":"object","properties":{"ar":{"type":"string","minLength":1},"en":{"type":"string","minLength":1}},"required":["ar","en"]},"category":{"type":"string","minLength":1,"maxLength":100},"languages":{"minItems":1,"type":"array","items":{"type":"string"}},"gender":{"type":"string","enum":["male","female","neutral"]},"age":{"type":"string","enum":["young","adult","middle-aged","senior"]},"accent":{"type":"string","maxLength":100}},"required":["candidateId","name","description","category","languages"]},"example":{"candidateId":"example","name":{"ar":"مثال","en":"example"},"description":{"ar":"مثال","en":"example"},"category":"example","languages":["example"],"gender":"male","age":"young","accent":"example"}}}},"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","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)$"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"},"data":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}},"slug":{"type":"string"},"name":{"type":"object","properties":{"ar":{"type":"string","minLength":1},"en":{"type":"string","minLength":1}},"required":["ar","en"]},"description":{"type":"object","properties":{"ar":{"type":"string","minLength":1},"en":{"type":"string","minLength":1}},"required":["ar","en"]},"language":{"type":"string"},"dialect":{"type":"string"},"accent":{"type":"string"},"gender":{"type":"string"},"age":{"type":"string"},"category":{"type":"string"},"tags":{"type":"array","items":{"type":"string"}},"isPublic":{"type":"boolean"},"trendingScore":{"type":"number"},"usageCount":{"type":"number"},"noticePeriod":{"type":"number"},"sampleUrl":{"type":["string","null"]},"sampleDialect":{"description":"The dialect the sample is read in (it can differ from dialect)","type":["string","null"]},"saved":{"type":"boolean"},"owned":{"type":"boolean"},"ownerId":{"anyOf":[{"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)$"},{"type":"null"}]},"workspaceId":{"anyOf":[{"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)$"},{"type":"null"}]},"premium":{"type":"boolean","description":"A catalogue voice the admin marked premium; needs a plan with premium voices"},"locked":{"type":"boolean","description":"Premium, and this workspace’s plan does not include premium voices (sample still playable)"}},"required":["id","createdAt","updatedAt","slug","name","description","language","dialect","accent","gender","age","category","tags","isPublic","trendingScore","usageCount","noticePeriod","saved","owned","ownerId","workspaceId","premium","locked"],"additionalProperties":{}},"example":{"id":"01990000-0000-7000-8000-000000000001","createdAt":"2026-09-19T12:00:00.000Z","updatedAt":"2026-09-19T12:00:00.000Z","data":{},"slug":"example","name":{"ar":"مثال","en":"example"},"description":{"ar":"مثال","en":"example"},"language":"ar","dialect":"ar-SA","accent":"example","gender":"example","age":"example","category":"example","tags":["example"],"isPublic":true,"trendingScore":1,"usageCount":1,"noticePeriod":1,"sampleUrl":"http://localhost:4000/example","sampleDialect":"example","saved":true,"owned":true,"ownerId":"01990000-0000-7000-8000-000000000001","workspaceId":"01990000-0000-7000-8000-000000000001","premium":true,"locked":true}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/voice-designs/{id}/save","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/voice-designs/{id}/save","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/voice-designs/{id}/save","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/voice-designs/{id}/save","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/voice-designs/{id}/save","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/voice-designs/{id}/save","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/voice-designs/{id}/save","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/voice-designs/{id}/save","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/voice-designs/{id}/save","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/voice-designs/{id}/save","traceId":"request-id"}}}}}}},"/v1/generations/quote":{"post":{"operationId":"quoteGeneration","tags":["Text to speech"],"summary":"quote Generation","description":"Requires workspace role viewer or above. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"X-CSRF-Token","in":"header","required":false,"description":"Required for cookie-authenticated mutations; returned by sign-in/sign-up.","schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"default":"tts","type":"string","enum":["tts","voice-change","music","sfx","clean","dub","lyric-edit","voice-design","assistant","dialogue","captions","video"]},"dialogue":{"description":"Required when type is dialogue; text/voiceId are ignored","type":"object","properties":{"lines":{"minItems":1,"maxItems":200,"type":"array","items":{"type":"object","properties":{"speaker":{"type":"string","minLength":1,"maxLength":40,"description":"Speaker label as written in the script, e.g. Host"},"voiceId":{"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)$"},"text":{"type":"string","minLength":1,"maxLength":2000},"style":{"description":"Delivery hint, e.g. excited, whisper","type":"string","maxLength":40},"pauseAfter":{"description":"Seconds of silence after this line; default = the dialogue gap","type":"number","minimum":0,"maximum":5}},"required":["speaker","voiceId","text"]}},"gap":{"default":0.35,"description":"Default pause between lines, seconds","type":"number","minimum":0,"maximum":3},"overlap":{"default":false,"description":"Let quick replies start slightly before the previous line ends","type":"boolean"}},"required":["lines"]},"clientId":{"description":"Client this work is for (team usage reports)","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)$"},"productModelId":{"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)$"},"voiceId":{"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)$"},"text":{"type":"string","maxLength":40000},"prompt":{"type":"string","maxLength":10000},"uploadId":{"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)$"},"locale":{"default":"ar-SA","type":"string"},"dialect":{"description":"Dialect to speak in, e.g. ar-EG, ar (Modern Standard Arabic), en-GB. tts: default the voice dialect. dialogue: every voice speaks it; default each voice keeps its own dialect. voice-change: the dialect the recording is re-voiced in; default the target voice dialect. dialogue and voice-change accept only supported speech dialects (422 on `dialect` otherwise)","type":"string","maxLength":20},"params":{"default":{"speed":50,"consistency":50,"voiceMatch":75,"expressiveness":50,"clarity":75,"energyMode":"normal"},"type":"object","properties":{"speed":{"default":50,"type":"number","minimum":0,"maximum":100},"consistency":{"default":50,"type":"number","minimum":0,"maximum":100},"voiceMatch":{"default":75,"type":"number","minimum":0,"maximum":100},"expressiveness":{"default":50,"type":"number","minimum":0,"maximum":100},"clarity":{"default":75,"type":"number","minimum":0,"maximum":100},"energyMode":{"default":"normal","type":"string","enum":["normal","boost"]}}},"duration":{"default":10,"type":"number","exclusiveMinimum":0,"maximum":3600},"autoTashkeel":{"default":false,"type":"boolean"},"instructions":{"type":"string","maxLength":500},"styles":{"type":"object","properties":{"include":{"maxItems":30,"type":"array","items":{"type":"string"}},"exclude":{"maxItems":30,"type":"array","items":{"type":"string"}}},"required":["include","exclude"]},"songId":{"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)$"},"sectionId":{"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)$"},"mode":{"type":"string","enum":["denoise","stems"]},"assistantSessionId":{"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)$"},"assistantApproval":{"description":"Neo: the answer to a pending approval (set by POST /v1/assistant/sessions/{id}/approvals)","type":"object","properties":{"toolUseId":{"type":"string","minLength":1,"maxLength":200},"approve":{"type":"boolean"}},"required":["toolUseId","approve"]},"strength":{"type":"number","minimum":0,"maximum":100},"lyrics":{"type":"string","maxLength":10000},"gender":{"type":"string","enum":["male","female","neutral"]},"age":{"type":"string","enum":["young","adult","middle-aged","senior"]},"accent":{"type":"string","maxLength":100},"languages":{"maxItems":20,"type":"array","items":{"type":"string"}},"previewText":{"type":"string","maxLength":2000},"adaptFrom":{"anyOf":[{"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)$"},{"maxItems":5,"type":"array","items":{"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)$"}}]}},"required":["productModelId"]},"example":{"type":"tts","productModelId":"01990000-0000-7000-8000-000000000001","text":"مرحباً بكم في فوكلا","locale":"ar-SA"}}}},"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"credits":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"billableCharacters":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"estimatedSeconds":{"type":"number"},"productModelId":{"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)$"}},"required":["credits","billableCharacters","estimatedSeconds","productModelId"]},"example":{"credits":-9007199254740991,"billableCharacters":-9007199254740991,"estimatedSeconds":1,"productModelId":"01990000-0000-7000-8000-000000000001"}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/generations/quote","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/generations/quote","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/generations/quote","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/generations/quote","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/generations/quote","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/generations/quote","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/generations/quote","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/generations/quote","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/generations/quote","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/generations/quote","traceId":"request-id"}}}}}}},"/v1/generations/tts":{"post":{"operationId":"createTts","tags":["Generations"],"summary":"create Tts","description":"Requires workspace role editor or above. Retry with the same Idempotency-Key and identical body. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"Idempotency-Key","in":"header","required":true,"schema":{"type":"string","maxLength":200},"example":"request-2026-001"},{"name":"X-CSRF-Token","in":"header","required":false,"description":"Required for cookie-authenticated mutations; returned by sign-in/sign-up.","schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"default":"tts","type":"string","enum":["tts","voice-change","music","sfx","clean","dub","lyric-edit","voice-design","assistant","dialogue","captions","video"]},"dialogue":{"description":"Required when type is dialogue; text/voiceId are ignored","type":"object","properties":{"lines":{"minItems":1,"maxItems":200,"type":"array","items":{"type":"object","properties":{"speaker":{"type":"string","minLength":1,"maxLength":40,"description":"Speaker label as written in the script, e.g. Host"},"voiceId":{"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)$"},"text":{"type":"string","minLength":1,"maxLength":2000},"style":{"description":"Delivery hint, e.g. excited, whisper","type":"string","maxLength":40},"pauseAfter":{"description":"Seconds of silence after this line; default = the dialogue gap","type":"number","minimum":0,"maximum":5}},"required":["speaker","voiceId","text"]}},"gap":{"default":0.35,"description":"Default pause between lines, seconds","type":"number","minimum":0,"maximum":3},"overlap":{"default":false,"description":"Let quick replies start slightly before the previous line ends","type":"boolean"}},"required":["lines"]},"clientId":{"description":"Client this work is for (team usage reports)","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)$"},"productModelId":{"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)$"},"voiceId":{"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)$"},"text":{"type":"string","maxLength":40000},"prompt":{"type":"string","maxLength":10000},"uploadId":{"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)$"},"locale":{"default":"ar-SA","type":"string"},"dialect":{"description":"Dialect to speak in, e.g. ar-EG, ar (Modern Standard Arabic), en-GB. tts: default the voice dialect. dialogue: every voice speaks it; default each voice keeps its own dialect. voice-change: the dialect the recording is re-voiced in; default the target voice dialect. dialogue and voice-change accept only supported speech dialects (422 on `dialect` otherwise)","type":"string","maxLength":20},"params":{"default":{"speed":50,"consistency":50,"voiceMatch":75,"expressiveness":50,"clarity":75,"energyMode":"normal"},"type":"object","properties":{"speed":{"default":50,"type":"number","minimum":0,"maximum":100},"consistency":{"default":50,"type":"number","minimum":0,"maximum":100},"voiceMatch":{"default":75,"type":"number","minimum":0,"maximum":100},"expressiveness":{"default":50,"type":"number","minimum":0,"maximum":100},"clarity":{"default":75,"type":"number","minimum":0,"maximum":100},"energyMode":{"default":"normal","type":"string","enum":["normal","boost"]}}},"duration":{"default":10,"type":"number","exclusiveMinimum":0,"maximum":3600},"autoTashkeel":{"default":false,"type":"boolean"},"instructions":{"type":"string","maxLength":500},"styles":{"type":"object","properties":{"include":{"maxItems":30,"type":"array","items":{"type":"string"}},"exclude":{"maxItems":30,"type":"array","items":{"type":"string"}}},"required":["include","exclude"]},"songId":{"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)$"},"sectionId":{"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)$"},"mode":{"type":"string","enum":["denoise","stems"]},"assistantSessionId":{"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)$"},"assistantApproval":{"description":"Neo: the answer to a pending approval (set by POST /v1/assistant/sessions/{id}/approvals)","type":"object","properties":{"toolUseId":{"type":"string","minLength":1,"maxLength":200},"approve":{"type":"boolean"}},"required":["toolUseId","approve"]},"strength":{"type":"number","minimum":0,"maximum":100},"lyrics":{"type":"string","maxLength":10000},"gender":{"type":"string","enum":["male","female","neutral"]},"age":{"type":"string","enum":["young","adult","middle-aged","senior"]},"accent":{"type":"string","maxLength":100},"languages":{"maxItems":20,"type":"array","items":{"type":"string"}},"previewText":{"type":"string","maxLength":2000},"adaptFrom":{"anyOf":[{"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)$"},{"maxItems":5,"type":"array","items":{"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)$"}}]}},"required":["productModelId"]},"example":{"type":"tts","dialogue":{"lines":[{"speaker":"example","voiceId":"01990000-0000-7000-8000-000000000001","text":"مرحباً بك في فوكلا.","style":"example","pauseAfter":0}],"gap":0.35,"overlap":false},"clientId":"01990000-0000-7000-8000-000000000001","productModelId":"01990000-0000-7000-8000-000000000001","voiceId":"01990000-0000-7000-8000-000000000001","text":"مرحباً بك في فوكلا.","prompt":"مرحباً بك في فوكلا.","uploadId":"01990000-0000-7000-8000-000000000001","locale":"ar-SA","dialect":"ar-SA","params":{"speed":50,"consistency":50,"voiceMatch":75,"expressiveness":50,"clarity":75,"energyMode":"normal"},"duration":10,"autoTashkeel":false,"instructions":"example","styles":{"include":["example"],"exclude":["example"]},"songId":"01990000-0000-7000-8000-000000000001","sectionId":"01990000-0000-7000-8000-000000000001","mode":"denoise","assistantSessionId":"01990000-0000-7000-8000-000000000001","assistantApproval":{"toolUseId":"example","approve":true},"strength":0,"lyrics":"example","gender":"male","age":"young","accent":"example","languages":["example"],"previewText":"example","adaptFrom":"01990000-0000-7000-8000-000000000001"}}}},"responses":{"202":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","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)$"},"type":{"type":"string","enum":["tts","voice-change","music","sfx","clean","dub","lyric-edit","voice-design","assistant","dialogue","captions","video"]},"dialogue":{"description":"For dialogue generations: the script with each line's timing in the mixed file","anyOf":[{"type":"object","properties":{"lines":{"type":"array","items":{"type":"object","properties":{"speaker":{"type":"string","minLength":1,"maxLength":40,"description":"Speaker label as written in the script, e.g. Host"},"voiceId":{"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)$"},"text":{"type":"string","minLength":1,"maxLength":2000},"style":{"description":"Delivery hint, e.g. excited, whisper","type":"string","maxLength":40},"pauseAfter":{"description":"Seconds of silence after this line; default = the dialogue gap","type":"number","minimum":0,"maximum":5},"start":{"type":["number","null"]},"end":{"type":["number","null"]}},"required":["speaker","voiceId","text","start","end"]}},"speakers":{"type":"array","items":{"type":"object","properties":{"speaker":{"type":"string"},"voiceId":{"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)$"}},"required":["speaker","voiceId"]}}},"required":["lines","speakers"]},{"type":"null"}]},"clientId":{"anyOf":[{"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)$"},{"type":"null"}]},"approval":{"description":"Latest review of this generation","anyOf":[{"type":"object","properties":{"status":{"type":"string","enum":["pending","approved","changes_requested","cancelled"]},"reviewId":{"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)$"}},"required":["status","reviewId"]},{"type":"null"}]},"status":{"type":"string","enum":["queued","running","succeeded","failed","cancelled"]},"progress":{"type":"number"},"creditsReserved":{"type":"number"},"creditsCharged":{"type":"number"},"assetUrl":{"type":["string","null"]},"peaks":{"type":"array","items":{"type":"number"}},"errorCode":{"type":["string","null"]},"voice":{"anyOf":[{"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)$"},"name":{"type":"object","properties":{"ar":{"type":"string","minLength":1},"en":{"type":"string","minLength":1}},"required":["ar","en"]},"category":{"type":"string"}},"required":["id","name","category"]},{"type":"null"}]},"downloads":{"description":"Signed links per format that download a named file (Content-Disposition attachment); play `assetUrl` / `video.url` instead","type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"string"}},"mediaKind":{"description":"What the output plays as: a video (MP4) or audio","type":"string","enum":["audio","video"]},"video":{"description":"Set when the output is a video: what the player needs","anyOf":[{"type":"object","properties":{"url":{"type":"string","description":"Inline MP4 URL for playback"},"posterUrl":{"description":"Poster / first frame (JPEG) when one was made","type":["string","null"]},"aspectRatio":{"type":"string","enum":["9:16","16:9","1:1"]},"width":{"type":["number","null"]},"height":{"type":["number","null"]},"duration":{"type":["number","null"]},"projectId":{"anyOf":[{"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)$"},{"type":"null"}],"description":"The Vocla Video project it was rendered from"}},"required":["url","posterUrl","aspectRatio","width","height","duration","projectId"]},{"type":"null"}]},"sourceName":{"type":["string","null"]},"songId":{"anyOf":[{"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)$"},{"type":"null"}]},"songVersionId":{"anyOf":[{"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)$"},{"type":"null"}]},"assistantResponse":{"anyOf":[{"type":"object","properties":{"text":{"type":"string"},"transcript":{"type":"string"},"mode":{"type":"string","enum":["text","audio","realtime"]}},"required":["text","transcript","mode"]},{"type":"null"}]},"input":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}},"createdAt":{"type":"string"},"updatedAt":{"type":"string"}},"required":["id","type","status","progress","creditsReserved","creditsCharged","createdAt","updatedAt"],"additionalProperties":{}},"example":{"id":"01990000-0000-7000-8000-000000000001","type":"tts","dialogue":{"lines":[{"speaker":"example","voiceId":"01990000-0000-7000-8000-000000000001","text":"مرحباً بك في فوكلا.","style":"example","pauseAfter":0,"start":"example","end":"example"}],"speakers":[{"speaker":"example","voiceId":"01990000-0000-7000-8000-000000000001"}]},"clientId":"01990000-0000-7000-8000-000000000001","approval":{"status":"pending","reviewId":"01990000-0000-7000-8000-000000000001"},"status":"queued","progress":1,"creditsReserved":1,"creditsCharged":1,"assetUrl":"http://localhost:4000/example","peaks":[1],"errorCode":"example","voice":{"id":"01990000-0000-7000-8000-000000000001","name":{"ar":"مثال","en":"example"},"category":"example"},"downloads":{},"mediaKind":"audio","video":{"url":"example","posterUrl":"http://localhost:4000/example","aspectRatio":"9:16","width":"example","height":"example","duration":"example","projectId":"01990000-0000-7000-8000-000000000001"},"sourceName":"example","songId":"01990000-0000-7000-8000-000000000001","songVersionId":"01990000-0000-7000-8000-000000000001","assistantResponse":{"text":"مرحباً بك في فوكلا.","transcript":"example","mode":"text"},"input":{},"createdAt":"2026-09-19T12:00:00.000Z","updatedAt":"2026-09-19T12:00:00.000Z"}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/generations/tts","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/generations/tts","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/generations/tts","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/generations/tts","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/generations/tts","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/generations/tts","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/generations/tts","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/generations/tts","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/generations/tts","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/generations/tts","traceId":"request-id"}}}}}}},"/v1/generations/voice-change":{"post":{"operationId":"createVoiceChange","tags":["Generations"],"summary":"create Voice Change","description":"Requires workspace role editor or above. Retry with the same Idempotency-Key and identical body. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"Idempotency-Key","in":"header","required":true,"schema":{"type":"string","maxLength":200},"example":"request-2026-001"},{"name":"X-CSRF-Token","in":"header","required":false,"description":"Required for cookie-authenticated mutations; returned by sign-in/sign-up.","schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"productModelId":{"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)$"},"locale":{"default":"ar-SA","type":"string"},"dialect":{"description":"Dialect to speak in, e.g. ar-EG, ar (Modern Standard Arabic), en-GB. tts: default the voice dialect. dialogue: every voice speaks it; default each voice keeps its own dialect. voice-change: the dialect the recording is re-voiced in; default the target voice dialect. dialogue and voice-change accept only supported speech dialects (422 on `dialect` otherwise)","type":"string","maxLength":20},"params":{"default":{"speed":50,"consistency":50,"voiceMatch":75,"expressiveness":50,"clarity":75,"energyMode":"normal"},"type":"object","properties":{"speed":{"default":50,"type":"number","minimum":0,"maximum":100},"consistency":{"default":50,"type":"number","minimum":0,"maximum":100},"voiceMatch":{"default":75,"type":"number","minimum":0,"maximum":100},"expressiveness":{"default":50,"type":"number","minimum":0,"maximum":100},"clarity":{"default":75,"type":"number","minimum":0,"maximum":100},"energyMode":{"default":"normal","type":"string","enum":["normal","boost"]}}},"duration":{"default":10,"type":"number","exclusiveMinimum":0,"maximum":3600},"type":{"type":"string","const":"voice-change"},"uploadId":{"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)$"},"voiceId":{"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)$"}},"required":["productModelId","uploadId","voiceId"]},"example":{"productModelId":"01990000-0000-7000-8000-000000000001","locale":"ar-SA","dialect":"ar-SA","params":{"speed":50,"consistency":50,"voiceMatch":75,"expressiveness":50,"clarity":75,"energyMode":"normal"},"duration":10,"type":"voice-change","uploadId":"01990000-0000-7000-8000-000000000001","voiceId":"01990000-0000-7000-8000-000000000001"}}}},"responses":{"202":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","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)$"},"type":{"type":"string","enum":["tts","voice-change","music","sfx","clean","dub","lyric-edit","voice-design","assistant","dialogue","captions","video"]},"dialogue":{"description":"For dialogue generations: the script with each line's timing in the mixed file","anyOf":[{"type":"object","properties":{"lines":{"type":"array","items":{"type":"object","properties":{"speaker":{"type":"string","minLength":1,"maxLength":40,"description":"Speaker label as written in the script, e.g. Host"},"voiceId":{"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)$"},"text":{"type":"string","minLength":1,"maxLength":2000},"style":{"description":"Delivery hint, e.g. excited, whisper","type":"string","maxLength":40},"pauseAfter":{"description":"Seconds of silence after this line; default = the dialogue gap","type":"number","minimum":0,"maximum":5},"start":{"type":["number","null"]},"end":{"type":["number","null"]}},"required":["speaker","voiceId","text","start","end"]}},"speakers":{"type":"array","items":{"type":"object","properties":{"speaker":{"type":"string"},"voiceId":{"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)$"}},"required":["speaker","voiceId"]}}},"required":["lines","speakers"]},{"type":"null"}]},"clientId":{"anyOf":[{"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)$"},{"type":"null"}]},"approval":{"description":"Latest review of this generation","anyOf":[{"type":"object","properties":{"status":{"type":"string","enum":["pending","approved","changes_requested","cancelled"]},"reviewId":{"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)$"}},"required":["status","reviewId"]},{"type":"null"}]},"status":{"type":"string","enum":["queued","running","succeeded","failed","cancelled"]},"progress":{"type":"number"},"creditsReserved":{"type":"number"},"creditsCharged":{"type":"number"},"assetUrl":{"type":["string","null"]},"peaks":{"type":"array","items":{"type":"number"}},"errorCode":{"type":["string","null"]},"voice":{"anyOf":[{"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)$"},"name":{"type":"object","properties":{"ar":{"type":"string","minLength":1},"en":{"type":"string","minLength":1}},"required":["ar","en"]},"category":{"type":"string"}},"required":["id","name","category"]},{"type":"null"}]},"downloads":{"description":"Signed links per format that download a named file (Content-Disposition attachment); play `assetUrl` / `video.url` instead","type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"string"}},"mediaKind":{"description":"What the output plays as: a video (MP4) or audio","type":"string","enum":["audio","video"]},"video":{"description":"Set when the output is a video: what the player needs","anyOf":[{"type":"object","properties":{"url":{"type":"string","description":"Inline MP4 URL for playback"},"posterUrl":{"description":"Poster / first frame (JPEG) when one was made","type":["string","null"]},"aspectRatio":{"type":"string","enum":["9:16","16:9","1:1"]},"width":{"type":["number","null"]},"height":{"type":["number","null"]},"duration":{"type":["number","null"]},"projectId":{"anyOf":[{"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)$"},{"type":"null"}],"description":"The Vocla Video project it was rendered from"}},"required":["url","posterUrl","aspectRatio","width","height","duration","projectId"]},{"type":"null"}]},"sourceName":{"type":["string","null"]},"songId":{"anyOf":[{"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)$"},{"type":"null"}]},"songVersionId":{"anyOf":[{"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)$"},{"type":"null"}]},"assistantResponse":{"anyOf":[{"type":"object","properties":{"text":{"type":"string"},"transcript":{"type":"string"},"mode":{"type":"string","enum":["text","audio","realtime"]}},"required":["text","transcript","mode"]},{"type":"null"}]},"input":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}},"createdAt":{"type":"string"},"updatedAt":{"type":"string"}},"required":["id","type","status","progress","creditsReserved","creditsCharged","createdAt","updatedAt"],"additionalProperties":{}},"example":{"id":"01990000-0000-7000-8000-000000000001","type":"tts","dialogue":{"lines":[{"speaker":"example","voiceId":"01990000-0000-7000-8000-000000000001","text":"مرحباً بك في فوكلا.","style":"example","pauseAfter":0,"start":"example","end":"example"}],"speakers":[{"speaker":"example","voiceId":"01990000-0000-7000-8000-000000000001"}]},"clientId":"01990000-0000-7000-8000-000000000001","approval":{"status":"pending","reviewId":"01990000-0000-7000-8000-000000000001"},"status":"queued","progress":1,"creditsReserved":1,"creditsCharged":1,"assetUrl":"http://localhost:4000/example","peaks":[1],"errorCode":"example","voice":{"id":"01990000-0000-7000-8000-000000000001","name":{"ar":"مثال","en":"example"},"category":"example"},"downloads":{},"mediaKind":"audio","video":{"url":"example","posterUrl":"http://localhost:4000/example","aspectRatio":"9:16","width":"example","height":"example","duration":"example","projectId":"01990000-0000-7000-8000-000000000001"},"sourceName":"example","songId":"01990000-0000-7000-8000-000000000001","songVersionId":"01990000-0000-7000-8000-000000000001","assistantResponse":{"text":"مرحباً بك في فوكلا.","transcript":"example","mode":"text"},"input":{},"createdAt":"2026-09-19T12:00:00.000Z","updatedAt":"2026-09-19T12:00:00.000Z"}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/generations/voice-change","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/generations/voice-change","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/generations/voice-change","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/generations/voice-change","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/generations/voice-change","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/generations/voice-change","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/generations/voice-change","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/generations/voice-change","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/generations/voice-change","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/generations/voice-change","traceId":"request-id"}}}}}}},"/v1/generations/music":{"post":{"operationId":"createMusic","tags":["Generations"],"summary":"create Music","description":"Requires workspace role editor or above. Retry with the same Idempotency-Key and identical body. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"Idempotency-Key","in":"header","required":true,"schema":{"type":"string","maxLength":200},"example":"request-2026-001"},{"name":"X-CSRF-Token","in":"header","required":false,"description":"Required for cookie-authenticated mutations; returned by sign-in/sign-up.","schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"default":"tts","type":"string","enum":["tts","voice-change","music","sfx","clean","dub","lyric-edit","voice-design","assistant","dialogue","captions","video"]},"dialogue":{"description":"Required when type is dialogue; text/voiceId are ignored","type":"object","properties":{"lines":{"minItems":1,"maxItems":200,"type":"array","items":{"type":"object","properties":{"speaker":{"type":"string","minLength":1,"maxLength":40,"description":"Speaker label as written in the script, e.g. Host"},"voiceId":{"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)$"},"text":{"type":"string","minLength":1,"maxLength":2000},"style":{"description":"Delivery hint, e.g. excited, whisper","type":"string","maxLength":40},"pauseAfter":{"description":"Seconds of silence after this line; default = the dialogue gap","type":"number","minimum":0,"maximum":5}},"required":["speaker","voiceId","text"]}},"gap":{"default":0.35,"description":"Default pause between lines, seconds","type":"number","minimum":0,"maximum":3},"overlap":{"default":false,"description":"Let quick replies start slightly before the previous line ends","type":"boolean"}},"required":["lines"]},"clientId":{"description":"Client this work is for (team usage reports)","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)$"},"productModelId":{"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)$"},"voiceId":{"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)$"},"text":{"type":"string","maxLength":40000},"prompt":{"type":"string","maxLength":10000},"uploadId":{"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)$"},"locale":{"default":"ar-SA","type":"string"},"dialect":{"description":"Dialect to speak in, e.g. ar-EG, ar (Modern Standard Arabic), en-GB. tts: default the voice dialect. dialogue: every voice speaks it; default each voice keeps its own dialect. voice-change: the dialect the recording is re-voiced in; default the target voice dialect. dialogue and voice-change accept only supported speech dialects (422 on `dialect` otherwise)","type":"string","maxLength":20},"params":{"default":{"speed":50,"consistency":50,"voiceMatch":75,"expressiveness":50,"clarity":75,"energyMode":"normal"},"type":"object","properties":{"speed":{"default":50,"type":"number","minimum":0,"maximum":100},"consistency":{"default":50,"type":"number","minimum":0,"maximum":100},"voiceMatch":{"default":75,"type":"number","minimum":0,"maximum":100},"expressiveness":{"default":50,"type":"number","minimum":0,"maximum":100},"clarity":{"default":75,"type":"number","minimum":0,"maximum":100},"energyMode":{"default":"normal","type":"string","enum":["normal","boost"]}}},"duration":{"default":10,"type":"number","exclusiveMinimum":0,"maximum":3600},"autoTashkeel":{"default":false,"type":"boolean"},"instructions":{"type":"string","maxLength":500},"styles":{"type":"object","properties":{"include":{"maxItems":30,"type":"array","items":{"type":"string"}},"exclude":{"maxItems":30,"type":"array","items":{"type":"string"}}},"required":["include","exclude"]},"songId":{"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)$"},"sectionId":{"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)$"},"mode":{"type":"string","enum":["denoise","stems"]},"assistantSessionId":{"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)$"},"assistantApproval":{"description":"Neo: the answer to a pending approval (set by POST /v1/assistant/sessions/{id}/approvals)","type":"object","properties":{"toolUseId":{"type":"string","minLength":1,"maxLength":200},"approve":{"type":"boolean"}},"required":["toolUseId","approve"]},"strength":{"type":"number","minimum":0,"maximum":100},"lyrics":{"type":"string","maxLength":10000},"gender":{"type":"string","enum":["male","female","neutral"]},"age":{"type":"string","enum":["young","adult","middle-aged","senior"]},"accent":{"type":"string","maxLength":100},"languages":{"maxItems":20,"type":"array","items":{"type":"string"}},"previewText":{"type":"string","maxLength":2000},"adaptFrom":{"anyOf":[{"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)$"},{"maxItems":5,"type":"array","items":{"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)$"}}]}},"required":["productModelId"]},"example":{"type":"tts","dialogue":{"lines":[{"speaker":"example","voiceId":"01990000-0000-7000-8000-000000000001","text":"مرحباً بك في فوكلا.","style":"example","pauseAfter":0}],"gap":0.35,"overlap":false},"clientId":"01990000-0000-7000-8000-000000000001","productModelId":"01990000-0000-7000-8000-000000000001","voiceId":"01990000-0000-7000-8000-000000000001","text":"مرحباً بك في فوكلا.","prompt":"مرحباً بك في فوكلا.","uploadId":"01990000-0000-7000-8000-000000000001","locale":"ar-SA","dialect":"ar-SA","params":{"speed":50,"consistency":50,"voiceMatch":75,"expressiveness":50,"clarity":75,"energyMode":"normal"},"duration":10,"autoTashkeel":false,"instructions":"example","styles":{"include":["example"],"exclude":["example"]},"songId":"01990000-0000-7000-8000-000000000001","sectionId":"01990000-0000-7000-8000-000000000001","mode":"denoise","assistantSessionId":"01990000-0000-7000-8000-000000000001","assistantApproval":{"toolUseId":"example","approve":true},"strength":0,"lyrics":"example","gender":"male","age":"young","accent":"example","languages":["example"],"previewText":"example","adaptFrom":"01990000-0000-7000-8000-000000000001"}}}},"responses":{"202":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","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)$"},"type":{"type":"string","enum":["tts","voice-change","music","sfx","clean","dub","lyric-edit","voice-design","assistant","dialogue","captions","video"]},"dialogue":{"description":"For dialogue generations: the script with each line's timing in the mixed file","anyOf":[{"type":"object","properties":{"lines":{"type":"array","items":{"type":"object","properties":{"speaker":{"type":"string","minLength":1,"maxLength":40,"description":"Speaker label as written in the script, e.g. Host"},"voiceId":{"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)$"},"text":{"type":"string","minLength":1,"maxLength":2000},"style":{"description":"Delivery hint, e.g. excited, whisper","type":"string","maxLength":40},"pauseAfter":{"description":"Seconds of silence after this line; default = the dialogue gap","type":"number","minimum":0,"maximum":5},"start":{"type":["number","null"]},"end":{"type":["number","null"]}},"required":["speaker","voiceId","text","start","end"]}},"speakers":{"type":"array","items":{"type":"object","properties":{"speaker":{"type":"string"},"voiceId":{"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)$"}},"required":["speaker","voiceId"]}}},"required":["lines","speakers"]},{"type":"null"}]},"clientId":{"anyOf":[{"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)$"},{"type":"null"}]},"approval":{"description":"Latest review of this generation","anyOf":[{"type":"object","properties":{"status":{"type":"string","enum":["pending","approved","changes_requested","cancelled"]},"reviewId":{"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)$"}},"required":["status","reviewId"]},{"type":"null"}]},"status":{"type":"string","enum":["queued","running","succeeded","failed","cancelled"]},"progress":{"type":"number"},"creditsReserved":{"type":"number"},"creditsCharged":{"type":"number"},"assetUrl":{"type":["string","null"]},"peaks":{"type":"array","items":{"type":"number"}},"errorCode":{"type":["string","null"]},"voice":{"anyOf":[{"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)$"},"name":{"type":"object","properties":{"ar":{"type":"string","minLength":1},"en":{"type":"string","minLength":1}},"required":["ar","en"]},"category":{"type":"string"}},"required":["id","name","category"]},{"type":"null"}]},"downloads":{"description":"Signed links per format that download a named file (Content-Disposition attachment); play `assetUrl` / `video.url` instead","type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"string"}},"mediaKind":{"description":"What the output plays as: a video (MP4) or audio","type":"string","enum":["audio","video"]},"video":{"description":"Set when the output is a video: what the player needs","anyOf":[{"type":"object","properties":{"url":{"type":"string","description":"Inline MP4 URL for playback"},"posterUrl":{"description":"Poster / first frame (JPEG) when one was made","type":["string","null"]},"aspectRatio":{"type":"string","enum":["9:16","16:9","1:1"]},"width":{"type":["number","null"]},"height":{"type":["number","null"]},"duration":{"type":["number","null"]},"projectId":{"anyOf":[{"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)$"},{"type":"null"}],"description":"The Vocla Video project it was rendered from"}},"required":["url","posterUrl","aspectRatio","width","height","duration","projectId"]},{"type":"null"}]},"sourceName":{"type":["string","null"]},"songId":{"anyOf":[{"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)$"},{"type":"null"}]},"songVersionId":{"anyOf":[{"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)$"},{"type":"null"}]},"assistantResponse":{"anyOf":[{"type":"object","properties":{"text":{"type":"string"},"transcript":{"type":"string"},"mode":{"type":"string","enum":["text","audio","realtime"]}},"required":["text","transcript","mode"]},{"type":"null"}]},"input":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}},"createdAt":{"type":"string"},"updatedAt":{"type":"string"}},"required":["id","type","status","progress","creditsReserved","creditsCharged","createdAt","updatedAt"],"additionalProperties":{}},"example":{"id":"01990000-0000-7000-8000-000000000001","type":"tts","dialogue":{"lines":[{"speaker":"example","voiceId":"01990000-0000-7000-8000-000000000001","text":"مرحباً بك في فوكلا.","style":"example","pauseAfter":0,"start":"example","end":"example"}],"speakers":[{"speaker":"example","voiceId":"01990000-0000-7000-8000-000000000001"}]},"clientId":"01990000-0000-7000-8000-000000000001","approval":{"status":"pending","reviewId":"01990000-0000-7000-8000-000000000001"},"status":"queued","progress":1,"creditsReserved":1,"creditsCharged":1,"assetUrl":"http://localhost:4000/example","peaks":[1],"errorCode":"example","voice":{"id":"01990000-0000-7000-8000-000000000001","name":{"ar":"مثال","en":"example"},"category":"example"},"downloads":{},"mediaKind":"audio","video":{"url":"example","posterUrl":"http://localhost:4000/example","aspectRatio":"9:16","width":"example","height":"example","duration":"example","projectId":"01990000-0000-7000-8000-000000000001"},"sourceName":"example","songId":"01990000-0000-7000-8000-000000000001","songVersionId":"01990000-0000-7000-8000-000000000001","assistantResponse":{"text":"مرحباً بك في فوكلا.","transcript":"example","mode":"text"},"input":{},"createdAt":"2026-09-19T12:00:00.000Z","updatedAt":"2026-09-19T12:00:00.000Z"}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/generations/music","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/generations/music","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/generations/music","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/generations/music","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/generations/music","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/generations/music","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/generations/music","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/generations/music","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/generations/music","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/generations/music","traceId":"request-id"}}}}}}},"/v1/generations/sfx":{"post":{"operationId":"createSfx","tags":["Generations"],"summary":"create Sfx","description":"Requires workspace role editor or above. Retry with the same Idempotency-Key and identical body. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"Idempotency-Key","in":"header","required":true,"schema":{"type":"string","maxLength":200},"example":"request-2026-001"},{"name":"X-CSRF-Token","in":"header","required":false,"description":"Required for cookie-authenticated mutations; returned by sign-in/sign-up.","schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"default":"tts","type":"string","enum":["tts","voice-change","music","sfx","clean","dub","lyric-edit","voice-design","assistant","dialogue","captions","video"]},"dialogue":{"description":"Required when type is dialogue; text/voiceId are ignored","type":"object","properties":{"lines":{"minItems":1,"maxItems":200,"type":"array","items":{"type":"object","properties":{"speaker":{"type":"string","minLength":1,"maxLength":40,"description":"Speaker label as written in the script, e.g. Host"},"voiceId":{"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)$"},"text":{"type":"string","minLength":1,"maxLength":2000},"style":{"description":"Delivery hint, e.g. excited, whisper","type":"string","maxLength":40},"pauseAfter":{"description":"Seconds of silence after this line; default = the dialogue gap","type":"number","minimum":0,"maximum":5}},"required":["speaker","voiceId","text"]}},"gap":{"default":0.35,"description":"Default pause between lines, seconds","type":"number","minimum":0,"maximum":3},"overlap":{"default":false,"description":"Let quick replies start slightly before the previous line ends","type":"boolean"}},"required":["lines"]},"clientId":{"description":"Client this work is for (team usage reports)","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)$"},"productModelId":{"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)$"},"voiceId":{"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)$"},"text":{"type":"string","maxLength":40000},"prompt":{"type":"string","maxLength":10000},"uploadId":{"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)$"},"locale":{"default":"ar-SA","type":"string"},"dialect":{"description":"Dialect to speak in, e.g. ar-EG, ar (Modern Standard Arabic), en-GB. tts: default the voice dialect. dialogue: every voice speaks it; default each voice keeps its own dialect. voice-change: the dialect the recording is re-voiced in; default the target voice dialect. dialogue and voice-change accept only supported speech dialects (422 on `dialect` otherwise)","type":"string","maxLength":20},"params":{"default":{"speed":50,"consistency":50,"voiceMatch":75,"expressiveness":50,"clarity":75,"energyMode":"normal"},"type":"object","properties":{"speed":{"default":50,"type":"number","minimum":0,"maximum":100},"consistency":{"default":50,"type":"number","minimum":0,"maximum":100},"voiceMatch":{"default":75,"type":"number","minimum":0,"maximum":100},"expressiveness":{"default":50,"type":"number","minimum":0,"maximum":100},"clarity":{"default":75,"type":"number","minimum":0,"maximum":100},"energyMode":{"default":"normal","type":"string","enum":["normal","boost"]}}},"duration":{"default":10,"type":"number","exclusiveMinimum":0,"maximum":3600},"autoTashkeel":{"default":false,"type":"boolean"},"instructions":{"type":"string","maxLength":500},"styles":{"type":"object","properties":{"include":{"maxItems":30,"type":"array","items":{"type":"string"}},"exclude":{"maxItems":30,"type":"array","items":{"type":"string"}}},"required":["include","exclude"]},"songId":{"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)$"},"sectionId":{"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)$"},"mode":{"type":"string","enum":["denoise","stems"]},"assistantSessionId":{"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)$"},"assistantApproval":{"description":"Neo: the answer to a pending approval (set by POST /v1/assistant/sessions/{id}/approvals)","type":"object","properties":{"toolUseId":{"type":"string","minLength":1,"maxLength":200},"approve":{"type":"boolean"}},"required":["toolUseId","approve"]},"strength":{"type":"number","minimum":0,"maximum":100},"lyrics":{"type":"string","maxLength":10000},"gender":{"type":"string","enum":["male","female","neutral"]},"age":{"type":"string","enum":["young","adult","middle-aged","senior"]},"accent":{"type":"string","maxLength":100},"languages":{"maxItems":20,"type":"array","items":{"type":"string"}},"previewText":{"type":"string","maxLength":2000},"adaptFrom":{"anyOf":[{"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)$"},{"maxItems":5,"type":"array","items":{"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)$"}}]}},"required":["productModelId"]},"example":{"type":"tts","dialogue":{"lines":[{"speaker":"example","voiceId":"01990000-0000-7000-8000-000000000001","text":"مرحباً بك في فوكلا.","style":"example","pauseAfter":0}],"gap":0.35,"overlap":false},"clientId":"01990000-0000-7000-8000-000000000001","productModelId":"01990000-0000-7000-8000-000000000001","voiceId":"01990000-0000-7000-8000-000000000001","text":"مرحباً بك في فوكلا.","prompt":"مرحباً بك في فوكلا.","uploadId":"01990000-0000-7000-8000-000000000001","locale":"ar-SA","dialect":"ar-SA","params":{"speed":50,"consistency":50,"voiceMatch":75,"expressiveness":50,"clarity":75,"energyMode":"normal"},"duration":10,"autoTashkeel":false,"instructions":"example","styles":{"include":["example"],"exclude":["example"]},"songId":"01990000-0000-7000-8000-000000000001","sectionId":"01990000-0000-7000-8000-000000000001","mode":"denoise","assistantSessionId":"01990000-0000-7000-8000-000000000001","assistantApproval":{"toolUseId":"example","approve":true},"strength":0,"lyrics":"example","gender":"male","age":"young","accent":"example","languages":["example"],"previewText":"example","adaptFrom":"01990000-0000-7000-8000-000000000001"}}}},"responses":{"202":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","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)$"},"type":{"type":"string","enum":["tts","voice-change","music","sfx","clean","dub","lyric-edit","voice-design","assistant","dialogue","captions","video"]},"dialogue":{"description":"For dialogue generations: the script with each line's timing in the mixed file","anyOf":[{"type":"object","properties":{"lines":{"type":"array","items":{"type":"object","properties":{"speaker":{"type":"string","minLength":1,"maxLength":40,"description":"Speaker label as written in the script, e.g. Host"},"voiceId":{"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)$"},"text":{"type":"string","minLength":1,"maxLength":2000},"style":{"description":"Delivery hint, e.g. excited, whisper","type":"string","maxLength":40},"pauseAfter":{"description":"Seconds of silence after this line; default = the dialogue gap","type":"number","minimum":0,"maximum":5},"start":{"type":["number","null"]},"end":{"type":["number","null"]}},"required":["speaker","voiceId","text","start","end"]}},"speakers":{"type":"array","items":{"type":"object","properties":{"speaker":{"type":"string"},"voiceId":{"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)$"}},"required":["speaker","voiceId"]}}},"required":["lines","speakers"]},{"type":"null"}]},"clientId":{"anyOf":[{"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)$"},{"type":"null"}]},"approval":{"description":"Latest review of this generation","anyOf":[{"type":"object","properties":{"status":{"type":"string","enum":["pending","approved","changes_requested","cancelled"]},"reviewId":{"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)$"}},"required":["status","reviewId"]},{"type":"null"}]},"status":{"type":"string","enum":["queued","running","succeeded","failed","cancelled"]},"progress":{"type":"number"},"creditsReserved":{"type":"number"},"creditsCharged":{"type":"number"},"assetUrl":{"type":["string","null"]},"peaks":{"type":"array","items":{"type":"number"}},"errorCode":{"type":["string","null"]},"voice":{"anyOf":[{"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)$"},"name":{"type":"object","properties":{"ar":{"type":"string","minLength":1},"en":{"type":"string","minLength":1}},"required":["ar","en"]},"category":{"type":"string"}},"required":["id","name","category"]},{"type":"null"}]},"downloads":{"description":"Signed links per format that download a named file (Content-Disposition attachment); play `assetUrl` / `video.url` instead","type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"string"}},"mediaKind":{"description":"What the output plays as: a video (MP4) or audio","type":"string","enum":["audio","video"]},"video":{"description":"Set when the output is a video: what the player needs","anyOf":[{"type":"object","properties":{"url":{"type":"string","description":"Inline MP4 URL for playback"},"posterUrl":{"description":"Poster / first frame (JPEG) when one was made","type":["string","null"]},"aspectRatio":{"type":"string","enum":["9:16","16:9","1:1"]},"width":{"type":["number","null"]},"height":{"type":["number","null"]},"duration":{"type":["number","null"]},"projectId":{"anyOf":[{"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)$"},{"type":"null"}],"description":"The Vocla Video project it was rendered from"}},"required":["url","posterUrl","aspectRatio","width","height","duration","projectId"]},{"type":"null"}]},"sourceName":{"type":["string","null"]},"songId":{"anyOf":[{"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)$"},{"type":"null"}]},"songVersionId":{"anyOf":[{"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)$"},{"type":"null"}]},"assistantResponse":{"anyOf":[{"type":"object","properties":{"text":{"type":"string"},"transcript":{"type":"string"},"mode":{"type":"string","enum":["text","audio","realtime"]}},"required":["text","transcript","mode"]},{"type":"null"}]},"input":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}},"createdAt":{"type":"string"},"updatedAt":{"type":"string"}},"required":["id","type","status","progress","creditsReserved","creditsCharged","createdAt","updatedAt"],"additionalProperties":{}},"example":{"id":"01990000-0000-7000-8000-000000000001","type":"tts","dialogue":{"lines":[{"speaker":"example","voiceId":"01990000-0000-7000-8000-000000000001","text":"مرحباً بك في فوكلا.","style":"example","pauseAfter":0,"start":"example","end":"example"}],"speakers":[{"speaker":"example","voiceId":"01990000-0000-7000-8000-000000000001"}]},"clientId":"01990000-0000-7000-8000-000000000001","approval":{"status":"pending","reviewId":"01990000-0000-7000-8000-000000000001"},"status":"queued","progress":1,"creditsReserved":1,"creditsCharged":1,"assetUrl":"http://localhost:4000/example","peaks":[1],"errorCode":"example","voice":{"id":"01990000-0000-7000-8000-000000000001","name":{"ar":"مثال","en":"example"},"category":"example"},"downloads":{},"mediaKind":"audio","video":{"url":"example","posterUrl":"http://localhost:4000/example","aspectRatio":"9:16","width":"example","height":"example","duration":"example","projectId":"01990000-0000-7000-8000-000000000001"},"sourceName":"example","songId":"01990000-0000-7000-8000-000000000001","songVersionId":"01990000-0000-7000-8000-000000000001","assistantResponse":{"text":"مرحباً بك في فوكلا.","transcript":"example","mode":"text"},"input":{},"createdAt":"2026-09-19T12:00:00.000Z","updatedAt":"2026-09-19T12:00:00.000Z"}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/generations/sfx","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/generations/sfx","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/generations/sfx","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/generations/sfx","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/generations/sfx","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/generations/sfx","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/generations/sfx","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/generations/sfx","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/generations/sfx","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/generations/sfx","traceId":"request-id"}}}}}}},"/v1/generations/clean":{"post":{"operationId":"createClean","tags":["Generations"],"summary":"create Clean","description":"Requires workspace role editor or above. Retry with the same Idempotency-Key and identical body. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"Idempotency-Key","in":"header","required":true,"schema":{"type":"string","maxLength":200},"example":"request-2026-001"},{"name":"X-CSRF-Token","in":"header","required":false,"description":"Required for cookie-authenticated mutations; returned by sign-in/sign-up.","schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"productModelId":{"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)$"},"locale":{"default":"ar-SA","type":"string"},"duration":{"default":10,"type":"number","exclusiveMinimum":0,"maximum":3600},"mode":{"type":"string","enum":["denoise","stems"]},"strength":{"type":"number","minimum":0,"maximum":100},"type":{"type":"string","const":"clean"},"uploadId":{"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)$"}},"required":["productModelId","uploadId"]},"example":{"productModelId":"01990000-0000-7000-8000-000000000001","locale":"ar-SA","duration":10,"mode":"denoise","strength":0,"type":"clean","uploadId":"01990000-0000-7000-8000-000000000001"}}}},"responses":{"202":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","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)$"},"type":{"type":"string","enum":["tts","voice-change","music","sfx","clean","dub","lyric-edit","voice-design","assistant","dialogue","captions","video"]},"dialogue":{"description":"For dialogue generations: the script with each line's timing in the mixed file","anyOf":[{"type":"object","properties":{"lines":{"type":"array","items":{"type":"object","properties":{"speaker":{"type":"string","minLength":1,"maxLength":40,"description":"Speaker label as written in the script, e.g. Host"},"voiceId":{"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)$"},"text":{"type":"string","minLength":1,"maxLength":2000},"style":{"description":"Delivery hint, e.g. excited, whisper","type":"string","maxLength":40},"pauseAfter":{"description":"Seconds of silence after this line; default = the dialogue gap","type":"number","minimum":0,"maximum":5},"start":{"type":["number","null"]},"end":{"type":["number","null"]}},"required":["speaker","voiceId","text","start","end"]}},"speakers":{"type":"array","items":{"type":"object","properties":{"speaker":{"type":"string"},"voiceId":{"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)$"}},"required":["speaker","voiceId"]}}},"required":["lines","speakers"]},{"type":"null"}]},"clientId":{"anyOf":[{"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)$"},{"type":"null"}]},"approval":{"description":"Latest review of this generation","anyOf":[{"type":"object","properties":{"status":{"type":"string","enum":["pending","approved","changes_requested","cancelled"]},"reviewId":{"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)$"}},"required":["status","reviewId"]},{"type":"null"}]},"status":{"type":"string","enum":["queued","running","succeeded","failed","cancelled"]},"progress":{"type":"number"},"creditsReserved":{"type":"number"},"creditsCharged":{"type":"number"},"assetUrl":{"type":["string","null"]},"peaks":{"type":"array","items":{"type":"number"}},"errorCode":{"type":["string","null"]},"voice":{"anyOf":[{"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)$"},"name":{"type":"object","properties":{"ar":{"type":"string","minLength":1},"en":{"type":"string","minLength":1}},"required":["ar","en"]},"category":{"type":"string"}},"required":["id","name","category"]},{"type":"null"}]},"downloads":{"description":"Signed links per format that download a named file (Content-Disposition attachment); play `assetUrl` / `video.url` instead","type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"string"}},"mediaKind":{"description":"What the output plays as: a video (MP4) or audio","type":"string","enum":["audio","video"]},"video":{"description":"Set when the output is a video: what the player needs","anyOf":[{"type":"object","properties":{"url":{"type":"string","description":"Inline MP4 URL for playback"},"posterUrl":{"description":"Poster / first frame (JPEG) when one was made","type":["string","null"]},"aspectRatio":{"type":"string","enum":["9:16","16:9","1:1"]},"width":{"type":["number","null"]},"height":{"type":["number","null"]},"duration":{"type":["number","null"]},"projectId":{"anyOf":[{"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)$"},{"type":"null"}],"description":"The Vocla Video project it was rendered from"}},"required":["url","posterUrl","aspectRatio","width","height","duration","projectId"]},{"type":"null"}]},"sourceName":{"type":["string","null"]},"songId":{"anyOf":[{"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)$"},{"type":"null"}]},"songVersionId":{"anyOf":[{"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)$"},{"type":"null"}]},"assistantResponse":{"anyOf":[{"type":"object","properties":{"text":{"type":"string"},"transcript":{"type":"string"},"mode":{"type":"string","enum":["text","audio","realtime"]}},"required":["text","transcript","mode"]},{"type":"null"}]},"input":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}},"createdAt":{"type":"string"},"updatedAt":{"type":"string"}},"required":["id","type","status","progress","creditsReserved","creditsCharged","createdAt","updatedAt"],"additionalProperties":{}},"example":{"id":"01990000-0000-7000-8000-000000000001","type":"tts","dialogue":{"lines":[{"speaker":"example","voiceId":"01990000-0000-7000-8000-000000000001","text":"مرحباً بك في فوكلا.","style":"example","pauseAfter":0,"start":"example","end":"example"}],"speakers":[{"speaker":"example","voiceId":"01990000-0000-7000-8000-000000000001"}]},"clientId":"01990000-0000-7000-8000-000000000001","approval":{"status":"pending","reviewId":"01990000-0000-7000-8000-000000000001"},"status":"queued","progress":1,"creditsReserved":1,"creditsCharged":1,"assetUrl":"http://localhost:4000/example","peaks":[1],"errorCode":"example","voice":{"id":"01990000-0000-7000-8000-000000000001","name":{"ar":"مثال","en":"example"},"category":"example"},"downloads":{},"mediaKind":"audio","video":{"url":"example","posterUrl":"http://localhost:4000/example","aspectRatio":"9:16","width":"example","height":"example","duration":"example","projectId":"01990000-0000-7000-8000-000000000001"},"sourceName":"example","songId":"01990000-0000-7000-8000-000000000001","songVersionId":"01990000-0000-7000-8000-000000000001","assistantResponse":{"text":"مرحباً بك في فوكلا.","transcript":"example","mode":"text"},"input":{},"createdAt":"2026-09-19T12:00:00.000Z","updatedAt":"2026-09-19T12:00:00.000Z"}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/generations/clean","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/generations/clean","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/generations/clean","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/generations/clean","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/generations/clean","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/generations/clean","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/generations/clean","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/generations/clean","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/generations/clean","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/generations/clean","traceId":"request-id"}}}}}}},"/v1/generations/dub":{"post":{"operationId":"createDub","tags":["Generations"],"summary":"create Dub","description":"Requires workspace role editor or above. Retry with the same Idempotency-Key and identical body. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"Idempotency-Key","in":"header","required":true,"schema":{"type":"string","maxLength":200},"example":"request-2026-001"},{"name":"X-CSRF-Token","in":"header","required":false,"description":"Required for cookie-authenticated mutations; returned by sign-in/sign-up.","schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"default":"tts","type":"string","enum":["tts","voice-change","music","sfx","clean","dub","lyric-edit","voice-design","assistant","dialogue","captions","video"]},"dialogue":{"description":"Required when type is dialogue; text/voiceId are ignored","type":"object","properties":{"lines":{"minItems":1,"maxItems":200,"type":"array","items":{"type":"object","properties":{"speaker":{"type":"string","minLength":1,"maxLength":40,"description":"Speaker label as written in the script, e.g. Host"},"voiceId":{"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)$"},"text":{"type":"string","minLength":1,"maxLength":2000},"style":{"description":"Delivery hint, e.g. excited, whisper","type":"string","maxLength":40},"pauseAfter":{"description":"Seconds of silence after this line; default = the dialogue gap","type":"number","minimum":0,"maximum":5}},"required":["speaker","voiceId","text"]}},"gap":{"default":0.35,"description":"Default pause between lines, seconds","type":"number","minimum":0,"maximum":3},"overlap":{"default":false,"description":"Let quick replies start slightly before the previous line ends","type":"boolean"}},"required":["lines"]},"clientId":{"description":"Client this work is for (team usage reports)","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)$"},"productModelId":{"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)$"},"voiceId":{"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)$"},"text":{"type":"string","maxLength":40000},"prompt":{"type":"string","maxLength":10000},"uploadId":{"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)$"},"locale":{"default":"ar-SA","type":"string"},"dialect":{"description":"Dialect to speak in, e.g. ar-EG, ar (Modern Standard Arabic), en-GB. tts: default the voice dialect. dialogue: every voice speaks it; default each voice keeps its own dialect. voice-change: the dialect the recording is re-voiced in; default the target voice dialect. dialogue and voice-change accept only supported speech dialects (422 on `dialect` otherwise)","type":"string","maxLength":20},"params":{"default":{"speed":50,"consistency":50,"voiceMatch":75,"expressiveness":50,"clarity":75,"energyMode":"normal"},"type":"object","properties":{"speed":{"default":50,"type":"number","minimum":0,"maximum":100},"consistency":{"default":50,"type":"number","minimum":0,"maximum":100},"voiceMatch":{"default":75,"type":"number","minimum":0,"maximum":100},"expressiveness":{"default":50,"type":"number","minimum":0,"maximum":100},"clarity":{"default":75,"type":"number","minimum":0,"maximum":100},"energyMode":{"default":"normal","type":"string","enum":["normal","boost"]}}},"duration":{"default":10,"type":"number","exclusiveMinimum":0,"maximum":3600},"autoTashkeel":{"default":false,"type":"boolean"},"instructions":{"type":"string","maxLength":500},"styles":{"type":"object","properties":{"include":{"maxItems":30,"type":"array","items":{"type":"string"}},"exclude":{"maxItems":30,"type":"array","items":{"type":"string"}}},"required":["include","exclude"]},"songId":{"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)$"},"sectionId":{"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)$"},"mode":{"type":"string","enum":["denoise","stems"]},"assistantSessionId":{"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)$"},"assistantApproval":{"description":"Neo: the answer to a pending approval (set by POST /v1/assistant/sessions/{id}/approvals)","type":"object","properties":{"toolUseId":{"type":"string","minLength":1,"maxLength":200},"approve":{"type":"boolean"}},"required":["toolUseId","approve"]},"strength":{"type":"number","minimum":0,"maximum":100},"lyrics":{"type":"string","maxLength":10000},"gender":{"type":"string","enum":["male","female","neutral"]},"age":{"type":"string","enum":["young","adult","middle-aged","senior"]},"accent":{"type":"string","maxLength":100},"languages":{"maxItems":20,"type":"array","items":{"type":"string"}},"previewText":{"type":"string","maxLength":2000},"adaptFrom":{"anyOf":[{"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)$"},{"maxItems":5,"type":"array","items":{"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)$"}}]}},"required":["productModelId"]},"example":{"type":"tts","dialogue":{"lines":[{"speaker":"example","voiceId":"01990000-0000-7000-8000-000000000001","text":"مرحباً بك في فوكلا.","style":"example","pauseAfter":0}],"gap":0.35,"overlap":false},"clientId":"01990000-0000-7000-8000-000000000001","productModelId":"01990000-0000-7000-8000-000000000001","voiceId":"01990000-0000-7000-8000-000000000001","text":"مرحباً بك في فوكلا.","prompt":"مرحباً بك في فوكلا.","uploadId":"01990000-0000-7000-8000-000000000001","locale":"ar-SA","dialect":"ar-SA","params":{"speed":50,"consistency":50,"voiceMatch":75,"expressiveness":50,"clarity":75,"energyMode":"normal"},"duration":10,"autoTashkeel":false,"instructions":"example","styles":{"include":["example"],"exclude":["example"]},"songId":"01990000-0000-7000-8000-000000000001","sectionId":"01990000-0000-7000-8000-000000000001","mode":"denoise","assistantSessionId":"01990000-0000-7000-8000-000000000001","assistantApproval":{"toolUseId":"example","approve":true},"strength":0,"lyrics":"example","gender":"male","age":"young","accent":"example","languages":["example"],"previewText":"example","adaptFrom":"01990000-0000-7000-8000-000000000001"}}}},"responses":{"202":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","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)$"},"type":{"type":"string","enum":["tts","voice-change","music","sfx","clean","dub","lyric-edit","voice-design","assistant","dialogue","captions","video"]},"dialogue":{"description":"For dialogue generations: the script with each line's timing in the mixed file","anyOf":[{"type":"object","properties":{"lines":{"type":"array","items":{"type":"object","properties":{"speaker":{"type":"string","minLength":1,"maxLength":40,"description":"Speaker label as written in the script, e.g. Host"},"voiceId":{"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)$"},"text":{"type":"string","minLength":1,"maxLength":2000},"style":{"description":"Delivery hint, e.g. excited, whisper","type":"string","maxLength":40},"pauseAfter":{"description":"Seconds of silence after this line; default = the dialogue gap","type":"number","minimum":0,"maximum":5},"start":{"type":["number","null"]},"end":{"type":["number","null"]}},"required":["speaker","voiceId","text","start","end"]}},"speakers":{"type":"array","items":{"type":"object","properties":{"speaker":{"type":"string"},"voiceId":{"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)$"}},"required":["speaker","voiceId"]}}},"required":["lines","speakers"]},{"type":"null"}]},"clientId":{"anyOf":[{"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)$"},{"type":"null"}]},"approval":{"description":"Latest review of this generation","anyOf":[{"type":"object","properties":{"status":{"type":"string","enum":["pending","approved","changes_requested","cancelled"]},"reviewId":{"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)$"}},"required":["status","reviewId"]},{"type":"null"}]},"status":{"type":"string","enum":["queued","running","succeeded","failed","cancelled"]},"progress":{"type":"number"},"creditsReserved":{"type":"number"},"creditsCharged":{"type":"number"},"assetUrl":{"type":["string","null"]},"peaks":{"type":"array","items":{"type":"number"}},"errorCode":{"type":["string","null"]},"voice":{"anyOf":[{"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)$"},"name":{"type":"object","properties":{"ar":{"type":"string","minLength":1},"en":{"type":"string","minLength":1}},"required":["ar","en"]},"category":{"type":"string"}},"required":["id","name","category"]},{"type":"null"}]},"downloads":{"description":"Signed links per format that download a named file (Content-Disposition attachment); play `assetUrl` / `video.url` instead","type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"string"}},"mediaKind":{"description":"What the output plays as: a video (MP4) or audio","type":"string","enum":["audio","video"]},"video":{"description":"Set when the output is a video: what the player needs","anyOf":[{"type":"object","properties":{"url":{"type":"string","description":"Inline MP4 URL for playback"},"posterUrl":{"description":"Poster / first frame (JPEG) when one was made","type":["string","null"]},"aspectRatio":{"type":"string","enum":["9:16","16:9","1:1"]},"width":{"type":["number","null"]},"height":{"type":["number","null"]},"duration":{"type":["number","null"]},"projectId":{"anyOf":[{"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)$"},{"type":"null"}],"description":"The Vocla Video project it was rendered from"}},"required":["url","posterUrl","aspectRatio","width","height","duration","projectId"]},{"type":"null"}]},"sourceName":{"type":["string","null"]},"songId":{"anyOf":[{"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)$"},{"type":"null"}]},"songVersionId":{"anyOf":[{"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)$"},{"type":"null"}]},"assistantResponse":{"anyOf":[{"type":"object","properties":{"text":{"type":"string"},"transcript":{"type":"string"},"mode":{"type":"string","enum":["text","audio","realtime"]}},"required":["text","transcript","mode"]},{"type":"null"}]},"input":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}},"createdAt":{"type":"string"},"updatedAt":{"type":"string"}},"required":["id","type","status","progress","creditsReserved","creditsCharged","createdAt","updatedAt"],"additionalProperties":{}},"example":{"id":"01990000-0000-7000-8000-000000000001","type":"tts","dialogue":{"lines":[{"speaker":"example","voiceId":"01990000-0000-7000-8000-000000000001","text":"مرحباً بك في فوكلا.","style":"example","pauseAfter":0,"start":"example","end":"example"}],"speakers":[{"speaker":"example","voiceId":"01990000-0000-7000-8000-000000000001"}]},"clientId":"01990000-0000-7000-8000-000000000001","approval":{"status":"pending","reviewId":"01990000-0000-7000-8000-000000000001"},"status":"queued","progress":1,"creditsReserved":1,"creditsCharged":1,"assetUrl":"http://localhost:4000/example","peaks":[1],"errorCode":"example","voice":{"id":"01990000-0000-7000-8000-000000000001","name":{"ar":"مثال","en":"example"},"category":"example"},"downloads":{},"mediaKind":"audio","video":{"url":"example","posterUrl":"http://localhost:4000/example","aspectRatio":"9:16","width":"example","height":"example","duration":"example","projectId":"01990000-0000-7000-8000-000000000001"},"sourceName":"example","songId":"01990000-0000-7000-8000-000000000001","songVersionId":"01990000-0000-7000-8000-000000000001","assistantResponse":{"text":"مرحباً بك في فوكلا.","transcript":"example","mode":"text"},"input":{},"createdAt":"2026-09-19T12:00:00.000Z","updatedAt":"2026-09-19T12:00:00.000Z"}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/generations/dub","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/generations/dub","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/generations/dub","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/generations/dub","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/generations/dub","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/generations/dub","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/generations/dub","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/generations/dub","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/generations/dub","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/generations/dub","traceId":"request-id"}}}}}}},"/v1/transcripts":{"get":{"operationId":"listTranscripts","tags":["Speech to text"],"summary":"list Transcripts","description":"Requires workspace role viewer or above. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"cursor","in":"query","required":false,"schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"schema":{"default":25,"type":"integer","minimum":1,"maximum":100}},{"name":"q","in":"query","required":false,"schema":{"type":"string","maxLength":100}},{"name":"purpose","in":"query","required":false,"schema":{"type":"string","enum":["transcript","captions"],"description":"Which tool created it; both share the same editor and exports"}},{"name":"status","in":"query","required":false,"schema":{"type":"string","enum":["queued","processing","ready","failed"]}}],"security":[{"session":[]},{"apiKey":[]}],"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"items":{"type":"array","items":{"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)$"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"},"data":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}},"title":{"type":"string"},"purpose":{"type":"string","enum":["transcript","captions"],"description":"Which tool created it; both share the same editor and exports"},"status":{"type":"string","enum":["queued","processing","ready","failed"]},"stage":{"anyOf":[{"type":"string","enum":["analyze","transcribe","speakers","translate","done"]},{"type":"null"}]},"progress":{"type":"number"},"error":{"type":["string","null"]},"isVideo":{"type":"boolean"},"duration":{"type":"number"},"language":{"type":"string","description":"Detected or chosen spoken language"},"speakerMode":{"type":"string","enum":["auto","single"]},"speakers":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"label":{"type":"string","maxLength":60},"gender":{"type":"string","enum":["male","female","unknown"]},"lines":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"seconds":{"type":"number"}},"required":["id","label","gender","lines","seconds"]}},"translation":{"anyOf":[{"type":"object","properties":{"locale":{"type":"string"},"status":{"type":"string","enum":["processing","ready","failed"]}},"required":["locale","status"]},{"type":"null"}]},"captionOptions":{"type":"object","properties":{"style":{"default":"boxed","type":"string","enum":["clean","boxed","bold","karaoke","minimal"]},"track":{"default":"source","type":"string","enum":["source","translation"]},"position":{"default":"bottom","type":"string","enum":["bottom","middle","top"]},"size":{"default":"m","type":"string","enum":["s","m","l"]},"maxLines":{"default":2,"type":"integer","minimum":1,"maximum":3},"maxCharsPerLine":{"default":38,"type":"integer","minimum":16,"maximum":60},"color":{"default":"#ffffff","type":"string","pattern":"^#[0-9a-f]{6}$"},"highlight":{"default":"#facc15","description":"Active-word colour for the karaoke style","type":"string","pattern":"^#[0-9a-f]{6}$"},"speakerNames":{"default":false,"type":"boolean"},"aspect":{"default":"original","description":"Reframe (centre crop / pad) for Reels, TikTok and Shorts","type":"string","enum":["original","9:16","1:1","16:9"]}}},"captions":{"anyOf":[{"type":"object","properties":{"status":{"type":"string","enum":["rendering","ready","failed"]},"progress":{"type":"number"},"url":{"type":["string","null"]},"downloadUrl":{"description":"The render as a named file download (Content-Disposition attachment); `url` plays inline","type":["string","null"]},"generationId":{"anyOf":[{"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)$"},{"type":"null"}]},"error":{"type":["string","null"]},"stale":{"type":"boolean","description":"The transcript or caption options changed since this render"}},"required":["status","progress","url","generationId","error","stale"]},{"type":"null"}]},"sourceUrl":{"type":["string","null"]},"thumbnailUrl":{"type":["string","null"]},"words":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"creditsCharged":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"estimateCaptionCredits":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"clientId":{"anyOf":[{"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)$"},{"type":"null"}]},"sourceName":{"type":["string","null"]},"preview":{"type":"string","description":"First words of the transcript"}},"required":["id","createdAt","updatedAt","title","purpose","status","stage","progress","error","isVideo","duration","language","speakerMode","speakers","translation","captionOptions","captions","sourceUrl","thumbnailUrl","words","creditsCharged","estimateCaptionCredits","clientId","sourceName","preview"],"additionalProperties":{}}},"nextCursor":{"type":["string","null"]}},"required":["items","nextCursor"]},"example":{"items":[{"id":"01990000-0000-7000-8000-000000000001","createdAt":"2026-09-19T12:00:00.000Z","updatedAt":"2026-09-19T12:00:00.000Z","data":{},"title":"example","purpose":"transcript","status":"queued","stage":"analyze","progress":1,"error":"example","isVideo":true,"duration":1,"language":"ar","speakerMode":"auto","speakers":[{"id":"example","label":"example","gender":"male","lines":-9007199254740991,"seconds":1}],"translation":{"locale":"ar-SA","status":"processing"},"captionOptions":{"style":"boxed","track":"source","position":"bottom","size":"m","maxLines":2,"maxCharsPerLine":38,"color":"#ffffff","highlight":"#facc15","speakerNames":false,"aspect":"original"},"captions":{"status":"rendering","progress":1,"url":"example","downloadUrl":"http://localhost:4000/example","generationId":"01990000-0000-7000-8000-000000000001","error":"example","stale":true},"sourceUrl":"http://localhost:4000/example","thumbnailUrl":"http://localhost:4000/example","words":-9007199254740991,"creditsCharged":-9007199254740991,"estimateCaptionCredits":-9007199254740991,"clientId":"01990000-0000-7000-8000-000000000001","sourceName":"example","preview":"example"}],"nextCursor":"example"}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/transcripts","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/transcripts","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/transcripts","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/transcripts","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/transcripts","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/transcripts","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/transcripts","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/transcripts","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/transcripts","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/transcripts","traceId":"request-id"}}}}}},"post":{"operationId":"createTranscript","tags":["Speech to text"],"summary":"Transcribe an uploaded audio or video file (credits per minute are reserved up front)","description":"Requires workspace role editor or above. Retry with the same Idempotency-Key and identical body. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"Idempotency-Key","in":"header","required":true,"schema":{"type":"string","maxLength":200},"example":"request-2026-001"},{"name":"X-CSRF-Token","in":"header","required":false,"description":"Required for cookie-authenticated mutations; returned by sign-in/sign-up.","schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"uploadId":{"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)$"},"title":{"type":"string","maxLength":120},"purpose":{"default":"transcript","type":"string","enum":["transcript","captions"],"description":"Which tool created it; both share the same editor and exports"},"language":{"default":"auto","description":"Spoken language (BCP-47, e.g. ar-SA, en-US) or 'auto' to detect","type":"string","maxLength":20},"speakers":{"default":"auto","description":"auto = detect who speaks when","type":"string","enum":["auto","single"]},"translateTo":{"description":"Also translate the transcript into this language (e.g. ar-SA, en-US)","type":"string","maxLength":20},"glossary":{"description":"Names and terms to help recognition","maxItems":100,"type":"array","items":{"type":"string","minLength":1,"maxLength":80}},"clientId":{"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)$"}},"required":["uploadId"]},"example":{"uploadId":"01990000-0000-7000-8000-000000000001","title":"example","purpose":"transcript","language":"auto","speakers":"auto","translateTo":"example","glossary":["example"],"clientId":"01990000-0000-7000-8000-000000000001"}}}},"responses":{"201":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","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)$"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"},"data":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}},"title":{"type":"string"},"purpose":{"type":"string","enum":["transcript","captions"],"description":"Which tool created it; both share the same editor and exports"},"status":{"type":"string","enum":["queued","processing","ready","failed"]},"stage":{"anyOf":[{"type":"string","enum":["analyze","transcribe","speakers","translate","done"]},{"type":"null"}]},"progress":{"type":"number"},"error":{"type":["string","null"]},"isVideo":{"type":"boolean"},"duration":{"type":"number"},"language":{"type":"string","description":"Detected or chosen spoken language"},"speakerMode":{"type":"string","enum":["auto","single"]},"segments":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"start":{"type":"number"},"end":{"type":"number"},"speaker":{"type":["string","null"]},"text":{"type":"string"},"translation":{"type":["string","null"]},"words":{"description":"Word timings (source track), when recognised; used by karaoke captions","type":"array","items":{"type":"object","properties":{"text":{"type":"string"},"start":{"type":"number"},"end":{"type":"number"}},"required":["text","start","end"]}}},"required":["id","start","end","speaker","text","translation"]}},"speakers":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"label":{"type":"string","maxLength":60},"gender":{"type":"string","enum":["male","female","unknown"]},"lines":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"seconds":{"type":"number"}},"required":["id","label","gender","lines","seconds"]}},"translation":{"anyOf":[{"type":"object","properties":{"locale":{"type":"string"},"status":{"type":"string","enum":["processing","ready","failed"]}},"required":["locale","status"]},{"type":"null"}]},"captionOptions":{"type":"object","properties":{"style":{"default":"boxed","type":"string","enum":["clean","boxed","bold","karaoke","minimal"]},"track":{"default":"source","type":"string","enum":["source","translation"]},"position":{"default":"bottom","type":"string","enum":["bottom","middle","top"]},"size":{"default":"m","type":"string","enum":["s","m","l"]},"maxLines":{"default":2,"type":"integer","minimum":1,"maximum":3},"maxCharsPerLine":{"default":38,"type":"integer","minimum":16,"maximum":60},"color":{"default":"#ffffff","type":"string","pattern":"^#[0-9a-f]{6}$"},"highlight":{"default":"#facc15","description":"Active-word colour for the karaoke style","type":"string","pattern":"^#[0-9a-f]{6}$"},"speakerNames":{"default":false,"type":"boolean"},"aspect":{"default":"original","description":"Reframe (centre crop / pad) for Reels, TikTok and Shorts","type":"string","enum":["original","9:16","1:1","16:9"]}}},"captions":{"anyOf":[{"type":"object","properties":{"status":{"type":"string","enum":["rendering","ready","failed"]},"progress":{"type":"number"},"url":{"type":["string","null"]},"downloadUrl":{"description":"The render as a named file download (Content-Disposition attachment); `url` plays inline","type":["string","null"]},"generationId":{"anyOf":[{"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)$"},{"type":"null"}]},"error":{"type":["string","null"]},"stale":{"type":"boolean","description":"The transcript or caption options changed since this render"}},"required":["status","progress","url","generationId","error","stale"]},{"type":"null"}]},"sourceUrl":{"type":["string","null"]},"thumbnailUrl":{"type":["string","null"]},"peaks":{"type":"array","items":{"type":"number"}},"words":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"creditsCharged":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"estimateCaptionCredits":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"clientId":{"anyOf":[{"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)$"},{"type":"null"}]},"sourceName":{"type":["string","null"]}},"required":["id","createdAt","updatedAt","title","purpose","status","stage","progress","error","isVideo","duration","language","speakerMode","segments","speakers","translation","captionOptions","captions","sourceUrl","thumbnailUrl","peaks","words","creditsCharged","estimateCaptionCredits","clientId","sourceName"],"additionalProperties":{}},"example":{"id":"01990000-0000-7000-8000-000000000001","createdAt":"2026-09-19T12:00:00.000Z","updatedAt":"2026-09-19T12:00:00.000Z","data":{},"title":"example","purpose":"transcript","status":"queued","stage":"analyze","progress":1,"error":"example","isVideo":true,"duration":1,"language":"ar","speakerMode":"auto","segments":[{"id":"example","start":1,"end":1,"speaker":"example","text":"مرحباً بك في فوكلا.","translation":"example","words":[{"text":"مرحباً بك في فوكلا.","start":1,"end":1}]}],"speakers":[{"id":"example","label":"example","gender":"male","lines":-9007199254740991,"seconds":1}],"translation":{"locale":"ar-SA","status":"processing"},"captionOptions":{"style":"boxed","track":"source","position":"bottom","size":"m","maxLines":2,"maxCharsPerLine":38,"color":"#ffffff","highlight":"#facc15","speakerNames":false,"aspect":"original"},"captions":{"status":"rendering","progress":1,"url":"example","downloadUrl":"http://localhost:4000/example","generationId":"01990000-0000-7000-8000-000000000001","error":"example","stale":true},"sourceUrl":"http://localhost:4000/example","thumbnailUrl":"http://localhost:4000/example","peaks":[1],"words":-9007199254740991,"creditsCharged":-9007199254740991,"estimateCaptionCredits":-9007199254740991,"clientId":"01990000-0000-7000-8000-000000000001","sourceName":"example"}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/transcripts","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/transcripts","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/transcripts","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/transcripts","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/transcripts","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/transcripts","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/transcripts","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/transcripts","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/transcripts","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/transcripts","traceId":"request-id"}}}}}}},"/v1/transcripts/{id}":{"get":{"operationId":"getTranscript","tags":["Speech to text"],"summary":"get Transcript","description":"Requires workspace role viewer or above. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","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)$"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"},"data":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}},"title":{"type":"string"},"purpose":{"type":"string","enum":["transcript","captions"],"description":"Which tool created it; both share the same editor and exports"},"status":{"type":"string","enum":["queued","processing","ready","failed"]},"stage":{"anyOf":[{"type":"string","enum":["analyze","transcribe","speakers","translate","done"]},{"type":"null"}]},"progress":{"type":"number"},"error":{"type":["string","null"]},"isVideo":{"type":"boolean"},"duration":{"type":"number"},"language":{"type":"string","description":"Detected or chosen spoken language"},"speakerMode":{"type":"string","enum":["auto","single"]},"segments":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"start":{"type":"number"},"end":{"type":"number"},"speaker":{"type":["string","null"]},"text":{"type":"string"},"translation":{"type":["string","null"]},"words":{"description":"Word timings (source track), when recognised; used by karaoke captions","type":"array","items":{"type":"object","properties":{"text":{"type":"string"},"start":{"type":"number"},"end":{"type":"number"}},"required":["text","start","end"]}}},"required":["id","start","end","speaker","text","translation"]}},"speakers":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"label":{"type":"string","maxLength":60},"gender":{"type":"string","enum":["male","female","unknown"]},"lines":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"seconds":{"type":"number"}},"required":["id","label","gender","lines","seconds"]}},"translation":{"anyOf":[{"type":"object","properties":{"locale":{"type":"string"},"status":{"type":"string","enum":["processing","ready","failed"]}},"required":["locale","status"]},{"type":"null"}]},"captionOptions":{"type":"object","properties":{"style":{"default":"boxed","type":"string","enum":["clean","boxed","bold","karaoke","minimal"]},"track":{"default":"source","type":"string","enum":["source","translation"]},"position":{"default":"bottom","type":"string","enum":["bottom","middle","top"]},"size":{"default":"m","type":"string","enum":["s","m","l"]},"maxLines":{"default":2,"type":"integer","minimum":1,"maximum":3},"maxCharsPerLine":{"default":38,"type":"integer","minimum":16,"maximum":60},"color":{"default":"#ffffff","type":"string","pattern":"^#[0-9a-f]{6}$"},"highlight":{"default":"#facc15","description":"Active-word colour for the karaoke style","type":"string","pattern":"^#[0-9a-f]{6}$"},"speakerNames":{"default":false,"type":"boolean"},"aspect":{"default":"original","description":"Reframe (centre crop / pad) for Reels, TikTok and Shorts","type":"string","enum":["original","9:16","1:1","16:9"]}}},"captions":{"anyOf":[{"type":"object","properties":{"status":{"type":"string","enum":["rendering","ready","failed"]},"progress":{"type":"number"},"url":{"type":["string","null"]},"downloadUrl":{"description":"The render as a named file download (Content-Disposition attachment); `url` plays inline","type":["string","null"]},"generationId":{"anyOf":[{"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)$"},{"type":"null"}]},"error":{"type":["string","null"]},"stale":{"type":"boolean","description":"The transcript or caption options changed since this render"}},"required":["status","progress","url","generationId","error","stale"]},{"type":"null"}]},"sourceUrl":{"type":["string","null"]},"thumbnailUrl":{"type":["string","null"]},"peaks":{"type":"array","items":{"type":"number"}},"words":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"creditsCharged":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"estimateCaptionCredits":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"clientId":{"anyOf":[{"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)$"},{"type":"null"}]},"sourceName":{"type":["string","null"]}},"required":["id","createdAt","updatedAt","title","purpose","status","stage","progress","error","isVideo","duration","language","speakerMode","segments","speakers","translation","captionOptions","captions","sourceUrl","thumbnailUrl","peaks","words","creditsCharged","estimateCaptionCredits","clientId","sourceName"],"additionalProperties":{}},"example":{"id":"01990000-0000-7000-8000-000000000001","createdAt":"2026-09-19T12:00:00.000Z","updatedAt":"2026-09-19T12:00:00.000Z","data":{},"title":"example","purpose":"transcript","status":"queued","stage":"analyze","progress":1,"error":"example","isVideo":true,"duration":1,"language":"ar","speakerMode":"auto","segments":[{"id":"example","start":1,"end":1,"speaker":"example","text":"مرحباً بك في فوكلا.","translation":"example","words":[{"text":"مرحباً بك في فوكلا.","start":1,"end":1}]}],"speakers":[{"id":"example","label":"example","gender":"male","lines":-9007199254740991,"seconds":1}],"translation":{"locale":"ar-SA","status":"processing"},"captionOptions":{"style":"boxed","track":"source","position":"bottom","size":"m","maxLines":2,"maxCharsPerLine":38,"color":"#ffffff","highlight":"#facc15","speakerNames":false,"aspect":"original"},"captions":{"status":"rendering","progress":1,"url":"example","downloadUrl":"http://localhost:4000/example","generationId":"01990000-0000-7000-8000-000000000001","error":"example","stale":true},"sourceUrl":"http://localhost:4000/example","thumbnailUrl":"http://localhost:4000/example","peaks":[1],"words":-9007199254740991,"creditsCharged":-9007199254740991,"estimateCaptionCredits":-9007199254740991,"clientId":"01990000-0000-7000-8000-000000000001","sourceName":"example"}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/transcripts/{id}","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/transcripts/{id}","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/transcripts/{id}","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/transcripts/{id}","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/transcripts/{id}","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/transcripts/{id}","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/transcripts/{id}","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/transcripts/{id}","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/transcripts/{id}","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/transcripts/{id}","traceId":"request-id"}}}}}},"patch":{"operationId":"updateTranscript","tags":["Speech to text"],"summary":"update Transcript","description":"Requires workspace role editor or above. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"X-CSRF-Token","in":"header","required":false,"description":"Required for cookie-authenticated mutations; returned by sign-in/sign-up.","schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"title":{"type":"string","minLength":1,"maxLength":120},"segments":{"description":"Edited lines (only those that changed); an unknown id is ignored","maxItems":5000,"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"start":{"type":"number","minimum":0},"end":{"type":"number","minimum":0},"speaker":{"type":["string","null"]},"text":{"type":"string","maxLength":2000},"translation":{"anyOf":[{"type":"string","maxLength":2000},{"type":"null"}]}},"required":["id"]}},"removeSegmentIds":{"maxItems":5000,"type":"array","items":{"type":"string"}},"speakers":{"description":"Rename speakers","maxItems":50,"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"label":{"type":"string","minLength":1,"maxLength":60}},"required":["id","label"]}},"captionOptions":{"type":"object","properties":{"style":{"default":"boxed","type":"string","enum":["clean","boxed","bold","karaoke","minimal"]},"track":{"default":"source","type":"string","enum":["source","translation"]},"position":{"default":"bottom","type":"string","enum":["bottom","middle","top"]},"size":{"default":"m","type":"string","enum":["s","m","l"]},"maxLines":{"default":2,"type":"integer","minimum":1,"maximum":3},"maxCharsPerLine":{"default":38,"type":"integer","minimum":16,"maximum":60},"color":{"default":"#ffffff","type":"string","pattern":"^#[0-9a-f]{6}$"},"highlight":{"default":"#facc15","description":"Active-word colour for the karaoke style","type":"string","pattern":"^#[0-9a-f]{6}$"},"speakerNames":{"default":false,"type":"boolean"},"aspect":{"default":"original","description":"Reframe (centre crop / pad) for Reels, TikTok and Shorts","type":"string","enum":["original","9:16","1:1","16:9"]}}}}},"example":{"title":"example","segments":[{"id":"example","start":0,"end":0,"speaker":"example","text":"مرحباً بك في فوكلا.","translation":"example"}],"removeSegmentIds":["example"],"speakers":[{"id":"example","label":"example"}],"captionOptions":{"style":"boxed","track":"source","position":"bottom","size":"m","maxLines":2,"maxCharsPerLine":38,"color":"#ffffff","highlight":"#facc15","speakerNames":false,"aspect":"original"}}}}},"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","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)$"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"},"data":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}},"title":{"type":"string"},"purpose":{"type":"string","enum":["transcript","captions"],"description":"Which tool created it; both share the same editor and exports"},"status":{"type":"string","enum":["queued","processing","ready","failed"]},"stage":{"anyOf":[{"type":"string","enum":["analyze","transcribe","speakers","translate","done"]},{"type":"null"}]},"progress":{"type":"number"},"error":{"type":["string","null"]},"isVideo":{"type":"boolean"},"duration":{"type":"number"},"language":{"type":"string","description":"Detected or chosen spoken language"},"speakerMode":{"type":"string","enum":["auto","single"]},"segments":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"start":{"type":"number"},"end":{"type":"number"},"speaker":{"type":["string","null"]},"text":{"type":"string"},"translation":{"type":["string","null"]},"words":{"description":"Word timings (source track), when recognised; used by karaoke captions","type":"array","items":{"type":"object","properties":{"text":{"type":"string"},"start":{"type":"number"},"end":{"type":"number"}},"required":["text","start","end"]}}},"required":["id","start","end","speaker","text","translation"]}},"speakers":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"label":{"type":"string","maxLength":60},"gender":{"type":"string","enum":["male","female","unknown"]},"lines":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"seconds":{"type":"number"}},"required":["id","label","gender","lines","seconds"]}},"translation":{"anyOf":[{"type":"object","properties":{"locale":{"type":"string"},"status":{"type":"string","enum":["processing","ready","failed"]}},"required":["locale","status"]},{"type":"null"}]},"captionOptions":{"type":"object","properties":{"style":{"default":"boxed","type":"string","enum":["clean","boxed","bold","karaoke","minimal"]},"track":{"default":"source","type":"string","enum":["source","translation"]},"position":{"default":"bottom","type":"string","enum":["bottom","middle","top"]},"size":{"default":"m","type":"string","enum":["s","m","l"]},"maxLines":{"default":2,"type":"integer","minimum":1,"maximum":3},"maxCharsPerLine":{"default":38,"type":"integer","minimum":16,"maximum":60},"color":{"default":"#ffffff","type":"string","pattern":"^#[0-9a-f]{6}$"},"highlight":{"default":"#facc15","description":"Active-word colour for the karaoke style","type":"string","pattern":"^#[0-9a-f]{6}$"},"speakerNames":{"default":false,"type":"boolean"},"aspect":{"default":"original","description":"Reframe (centre crop / pad) for Reels, TikTok and Shorts","type":"string","enum":["original","9:16","1:1","16:9"]}}},"captions":{"anyOf":[{"type":"object","properties":{"status":{"type":"string","enum":["rendering","ready","failed"]},"progress":{"type":"number"},"url":{"type":["string","null"]},"downloadUrl":{"description":"The render as a named file download (Content-Disposition attachment); `url` plays inline","type":["string","null"]},"generationId":{"anyOf":[{"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)$"},{"type":"null"}]},"error":{"type":["string","null"]},"stale":{"type":"boolean","description":"The transcript or caption options changed since this render"}},"required":["status","progress","url","generationId","error","stale"]},{"type":"null"}]},"sourceUrl":{"type":["string","null"]},"thumbnailUrl":{"type":["string","null"]},"peaks":{"type":"array","items":{"type":"number"}},"words":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"creditsCharged":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"estimateCaptionCredits":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"clientId":{"anyOf":[{"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)$"},{"type":"null"}]},"sourceName":{"type":["string","null"]}},"required":["id","createdAt","updatedAt","title","purpose","status","stage","progress","error","isVideo","duration","language","speakerMode","segments","speakers","translation","captionOptions","captions","sourceUrl","thumbnailUrl","peaks","words","creditsCharged","estimateCaptionCredits","clientId","sourceName"],"additionalProperties":{}},"example":{"id":"01990000-0000-7000-8000-000000000001","createdAt":"2026-09-19T12:00:00.000Z","updatedAt":"2026-09-19T12:00:00.000Z","data":{},"title":"example","purpose":"transcript","status":"queued","stage":"analyze","progress":1,"error":"example","isVideo":true,"duration":1,"language":"ar","speakerMode":"auto","segments":[{"id":"example","start":1,"end":1,"speaker":"example","text":"مرحباً بك في فوكلا.","translation":"example","words":[{"text":"مرحباً بك في فوكلا.","start":1,"end":1}]}],"speakers":[{"id":"example","label":"example","gender":"male","lines":-9007199254740991,"seconds":1}],"translation":{"locale":"ar-SA","status":"processing"},"captionOptions":{"style":"boxed","track":"source","position":"bottom","size":"m","maxLines":2,"maxCharsPerLine":38,"color":"#ffffff","highlight":"#facc15","speakerNames":false,"aspect":"original"},"captions":{"status":"rendering","progress":1,"url":"example","downloadUrl":"http://localhost:4000/example","generationId":"01990000-0000-7000-8000-000000000001","error":"example","stale":true},"sourceUrl":"http://localhost:4000/example","thumbnailUrl":"http://localhost:4000/example","peaks":[1],"words":-9007199254740991,"creditsCharged":-9007199254740991,"estimateCaptionCredits":-9007199254740991,"clientId":"01990000-0000-7000-8000-000000000001","sourceName":"example"}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/transcripts/{id}","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/transcripts/{id}","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/transcripts/{id}","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/transcripts/{id}","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/transcripts/{id}","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/transcripts/{id}","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/transcripts/{id}","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/transcripts/{id}","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/transcripts/{id}","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/transcripts/{id}","traceId":"request-id"}}}}}},"delete":{"operationId":"deleteTranscript","tags":["Speech to text"],"summary":"delete Transcript","description":"Requires workspace role editor or above. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"X-CSRF-Token","in":"header","required":false,"description":"Required for cookie-authenticated mutations; returned by sign-in/sign-up.","schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"ok":{"type":"boolean"}},"required":["ok"]},"example":{"ok":true}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/transcripts/{id}","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/transcripts/{id}","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/transcripts/{id}","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/transcripts/{id}","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/transcripts/{id}","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/transcripts/{id}","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/transcripts/{id}","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/transcripts/{id}","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/transcripts/{id}","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/transcripts/{id}","traceId":"request-id"}}}}}}},"/v1/transcripts/{id}/retry":{"post":{"operationId":"retryTranscript","tags":["Speech to text"],"summary":"Run the failed stage again","description":"Requires workspace role editor or above. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"X-CSRF-Token","in":"header","required":false,"description":"Required for cookie-authenticated mutations; returned by sign-in/sign-up.","schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","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)$"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"},"data":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}},"title":{"type":"string"},"purpose":{"type":"string","enum":["transcript","captions"],"description":"Which tool created it; both share the same editor and exports"},"status":{"type":"string","enum":["queued","processing","ready","failed"]},"stage":{"anyOf":[{"type":"string","enum":["analyze","transcribe","speakers","translate","done"]},{"type":"null"}]},"progress":{"type":"number"},"error":{"type":["string","null"]},"isVideo":{"type":"boolean"},"duration":{"type":"number"},"language":{"type":"string","description":"Detected or chosen spoken language"},"speakerMode":{"type":"string","enum":["auto","single"]},"segments":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"start":{"type":"number"},"end":{"type":"number"},"speaker":{"type":["string","null"]},"text":{"type":"string"},"translation":{"type":["string","null"]},"words":{"description":"Word timings (source track), when recognised; used by karaoke captions","type":"array","items":{"type":"object","properties":{"text":{"type":"string"},"start":{"type":"number"},"end":{"type":"number"}},"required":["text","start","end"]}}},"required":["id","start","end","speaker","text","translation"]}},"speakers":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"label":{"type":"string","maxLength":60},"gender":{"type":"string","enum":["male","female","unknown"]},"lines":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"seconds":{"type":"number"}},"required":["id","label","gender","lines","seconds"]}},"translation":{"anyOf":[{"type":"object","properties":{"locale":{"type":"string"},"status":{"type":"string","enum":["processing","ready","failed"]}},"required":["locale","status"]},{"type":"null"}]},"captionOptions":{"type":"object","properties":{"style":{"default":"boxed","type":"string","enum":["clean","boxed","bold","karaoke","minimal"]},"track":{"default":"source","type":"string","enum":["source","translation"]},"position":{"default":"bottom","type":"string","enum":["bottom","middle","top"]},"size":{"default":"m","type":"string","enum":["s","m","l"]},"maxLines":{"default":2,"type":"integer","minimum":1,"maximum":3},"maxCharsPerLine":{"default":38,"type":"integer","minimum":16,"maximum":60},"color":{"default":"#ffffff","type":"string","pattern":"^#[0-9a-f]{6}$"},"highlight":{"default":"#facc15","description":"Active-word colour for the karaoke style","type":"string","pattern":"^#[0-9a-f]{6}$"},"speakerNames":{"default":false,"type":"boolean"},"aspect":{"default":"original","description":"Reframe (centre crop / pad) for Reels, TikTok and Shorts","type":"string","enum":["original","9:16","1:1","16:9"]}}},"captions":{"anyOf":[{"type":"object","properties":{"status":{"type":"string","enum":["rendering","ready","failed"]},"progress":{"type":"number"},"url":{"type":["string","null"]},"downloadUrl":{"description":"The render as a named file download (Content-Disposition attachment); `url` plays inline","type":["string","null"]},"generationId":{"anyOf":[{"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)$"},{"type":"null"}]},"error":{"type":["string","null"]},"stale":{"type":"boolean","description":"The transcript or caption options changed since this render"}},"required":["status","progress","url","generationId","error","stale"]},{"type":"null"}]},"sourceUrl":{"type":["string","null"]},"thumbnailUrl":{"type":["string","null"]},"peaks":{"type":"array","items":{"type":"number"}},"words":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"creditsCharged":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"estimateCaptionCredits":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"clientId":{"anyOf":[{"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)$"},{"type":"null"}]},"sourceName":{"type":["string","null"]}},"required":["id","createdAt","updatedAt","title","purpose","status","stage","progress","error","isVideo","duration","language","speakerMode","segments","speakers","translation","captionOptions","captions","sourceUrl","thumbnailUrl","peaks","words","creditsCharged","estimateCaptionCredits","clientId","sourceName"],"additionalProperties":{}},"example":{"id":"01990000-0000-7000-8000-000000000001","createdAt":"2026-09-19T12:00:00.000Z","updatedAt":"2026-09-19T12:00:00.000Z","data":{},"title":"example","purpose":"transcript","status":"queued","stage":"analyze","progress":1,"error":"example","isVideo":true,"duration":1,"language":"ar","speakerMode":"auto","segments":[{"id":"example","start":1,"end":1,"speaker":"example","text":"مرحباً بك في فوكلا.","translation":"example","words":[{"text":"مرحباً بك في فوكلا.","start":1,"end":1}]}],"speakers":[{"id":"example","label":"example","gender":"male","lines":-9007199254740991,"seconds":1}],"translation":{"locale":"ar-SA","status":"processing"},"captionOptions":{"style":"boxed","track":"source","position":"bottom","size":"m","maxLines":2,"maxCharsPerLine":38,"color":"#ffffff","highlight":"#facc15","speakerNames":false,"aspect":"original"},"captions":{"status":"rendering","progress":1,"url":"example","downloadUrl":"http://localhost:4000/example","generationId":"01990000-0000-7000-8000-000000000001","error":"example","stale":true},"sourceUrl":"http://localhost:4000/example","thumbnailUrl":"http://localhost:4000/example","peaks":[1],"words":-9007199254740991,"creditsCharged":-9007199254740991,"estimateCaptionCredits":-9007199254740991,"clientId":"01990000-0000-7000-8000-000000000001","sourceName":"example"}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/transcripts/{id}/retry","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/transcripts/{id}/retry","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/transcripts/{id}/retry","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/transcripts/{id}/retry","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/transcripts/{id}/retry","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/transcripts/{id}/retry","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/transcripts/{id}/retry","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/transcripts/{id}/retry","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/transcripts/{id}/retry","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/transcripts/{id}/retry","traceId":"request-id"}}}}}}},"/v1/transcripts/{id}/translate":{"post":{"operationId":"translateTranscript","tags":["Speech to text"],"summary":"Translate every line (replaces an earlier translation)","description":"Requires workspace role editor or above. Retry with the same Idempotency-Key and identical body. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"Idempotency-Key","in":"header","required":true,"schema":{"type":"string","maxLength":200},"example":"request-2026-001"},{"name":"X-CSRF-Token","in":"header","required":false,"description":"Required for cookie-authenticated mutations; returned by sign-in/sign-up.","schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"locale":{"type":"string","minLength":1,"maxLength":20}},"required":["locale"]},"example":{"locale":"ar-SA"}}}},"responses":{"202":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","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)$"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"},"data":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}},"title":{"type":"string"},"purpose":{"type":"string","enum":["transcript","captions"],"description":"Which tool created it; both share the same editor and exports"},"status":{"type":"string","enum":["queued","processing","ready","failed"]},"stage":{"anyOf":[{"type":"string","enum":["analyze","transcribe","speakers","translate","done"]},{"type":"null"}]},"progress":{"type":"number"},"error":{"type":["string","null"]},"isVideo":{"type":"boolean"},"duration":{"type":"number"},"language":{"type":"string","description":"Detected or chosen spoken language"},"speakerMode":{"type":"string","enum":["auto","single"]},"segments":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"start":{"type":"number"},"end":{"type":"number"},"speaker":{"type":["string","null"]},"text":{"type":"string"},"translation":{"type":["string","null"]},"words":{"description":"Word timings (source track), when recognised; used by karaoke captions","type":"array","items":{"type":"object","properties":{"text":{"type":"string"},"start":{"type":"number"},"end":{"type":"number"}},"required":["text","start","end"]}}},"required":["id","start","end","speaker","text","translation"]}},"speakers":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"label":{"type":"string","maxLength":60},"gender":{"type":"string","enum":["male","female","unknown"]},"lines":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"seconds":{"type":"number"}},"required":["id","label","gender","lines","seconds"]}},"translation":{"anyOf":[{"type":"object","properties":{"locale":{"type":"string"},"status":{"type":"string","enum":["processing","ready","failed"]}},"required":["locale","status"]},{"type":"null"}]},"captionOptions":{"type":"object","properties":{"style":{"default":"boxed","type":"string","enum":["clean","boxed","bold","karaoke","minimal"]},"track":{"default":"source","type":"string","enum":["source","translation"]},"position":{"default":"bottom","type":"string","enum":["bottom","middle","top"]},"size":{"default":"m","type":"string","enum":["s","m","l"]},"maxLines":{"default":2,"type":"integer","minimum":1,"maximum":3},"maxCharsPerLine":{"default":38,"type":"integer","minimum":16,"maximum":60},"color":{"default":"#ffffff","type":"string","pattern":"^#[0-9a-f]{6}$"},"highlight":{"default":"#facc15","description":"Active-word colour for the karaoke style","type":"string","pattern":"^#[0-9a-f]{6}$"},"speakerNames":{"default":false,"type":"boolean"},"aspect":{"default":"original","description":"Reframe (centre crop / pad) for Reels, TikTok and Shorts","type":"string","enum":["original","9:16","1:1","16:9"]}}},"captions":{"anyOf":[{"type":"object","properties":{"status":{"type":"string","enum":["rendering","ready","failed"]},"progress":{"type":"number"},"url":{"type":["string","null"]},"downloadUrl":{"description":"The render as a named file download (Content-Disposition attachment); `url` plays inline","type":["string","null"]},"generationId":{"anyOf":[{"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)$"},{"type":"null"}]},"error":{"type":["string","null"]},"stale":{"type":"boolean","description":"The transcript or caption options changed since this render"}},"required":["status","progress","url","generationId","error","stale"]},{"type":"null"}]},"sourceUrl":{"type":["string","null"]},"thumbnailUrl":{"type":["string","null"]},"peaks":{"type":"array","items":{"type":"number"}},"words":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"creditsCharged":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"estimateCaptionCredits":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"clientId":{"anyOf":[{"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)$"},{"type":"null"}]},"sourceName":{"type":["string","null"]}},"required":["id","createdAt","updatedAt","title","purpose","status","stage","progress","error","isVideo","duration","language","speakerMode","segments","speakers","translation","captionOptions","captions","sourceUrl","thumbnailUrl","peaks","words","creditsCharged","estimateCaptionCredits","clientId","sourceName"],"additionalProperties":{}},"example":{"id":"01990000-0000-7000-8000-000000000001","createdAt":"2026-09-19T12:00:00.000Z","updatedAt":"2026-09-19T12:00:00.000Z","data":{},"title":"example","purpose":"transcript","status":"queued","stage":"analyze","progress":1,"error":"example","isVideo":true,"duration":1,"language":"ar","speakerMode":"auto","segments":[{"id":"example","start":1,"end":1,"speaker":"example","text":"مرحباً بك في فوكلا.","translation":"example","words":[{"text":"مرحباً بك في فوكلا.","start":1,"end":1}]}],"speakers":[{"id":"example","label":"example","gender":"male","lines":-9007199254740991,"seconds":1}],"translation":{"locale":"ar-SA","status":"processing"},"captionOptions":{"style":"boxed","track":"source","position":"bottom","size":"m","maxLines":2,"maxCharsPerLine":38,"color":"#ffffff","highlight":"#facc15","speakerNames":false,"aspect":"original"},"captions":{"status":"rendering","progress":1,"url":"example","downloadUrl":"http://localhost:4000/example","generationId":"01990000-0000-7000-8000-000000000001","error":"example","stale":true},"sourceUrl":"http://localhost:4000/example","thumbnailUrl":"http://localhost:4000/example","peaks":[1],"words":-9007199254740991,"creditsCharged":-9007199254740991,"estimateCaptionCredits":-9007199254740991,"clientId":"01990000-0000-7000-8000-000000000001","sourceName":"example"}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/transcripts/{id}/translate","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/transcripts/{id}/translate","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/transcripts/{id}/translate","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/transcripts/{id}/translate","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/transcripts/{id}/translate","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/transcripts/{id}/translate","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/transcripts/{id}/translate","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/transcripts/{id}/translate","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/transcripts/{id}/translate","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/transcripts/{id}/translate","traceId":"request-id"}}}}}}},"/v1/transcripts/{id}/segments/{segmentId}/split":{"post":{"operationId":"splitTranscriptSegment","tags":["Speech to text"],"summary":"split Transcript Segment","description":"Requires workspace role editor or above. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"segmentId","in":"path","required":true,"schema":{"type":"string"}},{"name":"X-CSRF-Token","in":"header","required":false,"description":"Required for cookie-authenticated mutations; returned by sign-in/sign-up.","schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"at":{"type":"number","description":"Seconds (absolute) where the line splits"},"textIndex":{"description":"Character index where the text splits","type":"integer","minimum":0,"maximum":9007199254740991}},"required":["at"]},"example":{"at":1,"textIndex":0}}}},"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","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)$"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"},"data":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}},"title":{"type":"string"},"purpose":{"type":"string","enum":["transcript","captions"],"description":"Which tool created it; both share the same editor and exports"},"status":{"type":"string","enum":["queued","processing","ready","failed"]},"stage":{"anyOf":[{"type":"string","enum":["analyze","transcribe","speakers","translate","done"]},{"type":"null"}]},"progress":{"type":"number"},"error":{"type":["string","null"]},"isVideo":{"type":"boolean"},"duration":{"type":"number"},"language":{"type":"string","description":"Detected or chosen spoken language"},"speakerMode":{"type":"string","enum":["auto","single"]},"segments":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"start":{"type":"number"},"end":{"type":"number"},"speaker":{"type":["string","null"]},"text":{"type":"string"},"translation":{"type":["string","null"]},"words":{"description":"Word timings (source track), when recognised; used by karaoke captions","type":"array","items":{"type":"object","properties":{"text":{"type":"string"},"start":{"type":"number"},"end":{"type":"number"}},"required":["text","start","end"]}}},"required":["id","start","end","speaker","text","translation"]}},"speakers":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"label":{"type":"string","maxLength":60},"gender":{"type":"string","enum":["male","female","unknown"]},"lines":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"seconds":{"type":"number"}},"required":["id","label","gender","lines","seconds"]}},"translation":{"anyOf":[{"type":"object","properties":{"locale":{"type":"string"},"status":{"type":"string","enum":["processing","ready","failed"]}},"required":["locale","status"]},{"type":"null"}]},"captionOptions":{"type":"object","properties":{"style":{"default":"boxed","type":"string","enum":["clean","boxed","bold","karaoke","minimal"]},"track":{"default":"source","type":"string","enum":["source","translation"]},"position":{"default":"bottom","type":"string","enum":["bottom","middle","top"]},"size":{"default":"m","type":"string","enum":["s","m","l"]},"maxLines":{"default":2,"type":"integer","minimum":1,"maximum":3},"maxCharsPerLine":{"default":38,"type":"integer","minimum":16,"maximum":60},"color":{"default":"#ffffff","type":"string","pattern":"^#[0-9a-f]{6}$"},"highlight":{"default":"#facc15","description":"Active-word colour for the karaoke style","type":"string","pattern":"^#[0-9a-f]{6}$"},"speakerNames":{"default":false,"type":"boolean"},"aspect":{"default":"original","description":"Reframe (centre crop / pad) for Reels, TikTok and Shorts","type":"string","enum":["original","9:16","1:1","16:9"]}}},"captions":{"anyOf":[{"type":"object","properties":{"status":{"type":"string","enum":["rendering","ready","failed"]},"progress":{"type":"number"},"url":{"type":["string","null"]},"downloadUrl":{"description":"The render as a named file download (Content-Disposition attachment); `url` plays inline","type":["string","null"]},"generationId":{"anyOf":[{"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)$"},{"type":"null"}]},"error":{"type":["string","null"]},"stale":{"type":"boolean","description":"The transcript or caption options changed since this render"}},"required":["status","progress","url","generationId","error","stale"]},{"type":"null"}]},"sourceUrl":{"type":["string","null"]},"thumbnailUrl":{"type":["string","null"]},"peaks":{"type":"array","items":{"type":"number"}},"words":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"creditsCharged":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"estimateCaptionCredits":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"clientId":{"anyOf":[{"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)$"},{"type":"null"}]},"sourceName":{"type":["string","null"]}},"required":["id","createdAt","updatedAt","title","purpose","status","stage","progress","error","isVideo","duration","language","speakerMode","segments","speakers","translation","captionOptions","captions","sourceUrl","thumbnailUrl","peaks","words","creditsCharged","estimateCaptionCredits","clientId","sourceName"],"additionalProperties":{}},"example":{"id":"01990000-0000-7000-8000-000000000001","createdAt":"2026-09-19T12:00:00.000Z","updatedAt":"2026-09-19T12:00:00.000Z","data":{},"title":"example","purpose":"transcript","status":"queued","stage":"analyze","progress":1,"error":"example","isVideo":true,"duration":1,"language":"ar","speakerMode":"auto","segments":[{"id":"example","start":1,"end":1,"speaker":"example","text":"مرحباً بك في فوكلا.","translation":"example","words":[{"text":"مرحباً بك في فوكلا.","start":1,"end":1}]}],"speakers":[{"id":"example","label":"example","gender":"male","lines":-9007199254740991,"seconds":1}],"translation":{"locale":"ar-SA","status":"processing"},"captionOptions":{"style":"boxed","track":"source","position":"bottom","size":"m","maxLines":2,"maxCharsPerLine":38,"color":"#ffffff","highlight":"#facc15","speakerNames":false,"aspect":"original"},"captions":{"status":"rendering","progress":1,"url":"example","downloadUrl":"http://localhost:4000/example","generationId":"01990000-0000-7000-8000-000000000001","error":"example","stale":true},"sourceUrl":"http://localhost:4000/example","thumbnailUrl":"http://localhost:4000/example","peaks":[1],"words":-9007199254740991,"creditsCharged":-9007199254740991,"estimateCaptionCredits":-9007199254740991,"clientId":"01990000-0000-7000-8000-000000000001","sourceName":"example"}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/transcripts/{id}/segments/{segmentId}/split","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/transcripts/{id}/segments/{segmentId}/split","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/transcripts/{id}/segments/{segmentId}/split","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/transcripts/{id}/segments/{segmentId}/split","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/transcripts/{id}/segments/{segmentId}/split","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/transcripts/{id}/segments/{segmentId}/split","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/transcripts/{id}/segments/{segmentId}/split","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/transcripts/{id}/segments/{segmentId}/split","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/transcripts/{id}/segments/{segmentId}/split","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/transcripts/{id}/segments/{segmentId}/split","traceId":"request-id"}}}}}}},"/v1/transcripts/{id}/segments/{segmentId}/merge":{"post":{"operationId":"mergeTranscriptSegment","tags":["Speech to text"],"summary":"Merge the line with the next one","description":"Requires workspace role editor or above. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"segmentId","in":"path","required":true,"schema":{"type":"string"}},{"name":"X-CSRF-Token","in":"header","required":false,"description":"Required for cookie-authenticated mutations; returned by sign-in/sign-up.","schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","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)$"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"},"data":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}},"title":{"type":"string"},"purpose":{"type":"string","enum":["transcript","captions"],"description":"Which tool created it; both share the same editor and exports"},"status":{"type":"string","enum":["queued","processing","ready","failed"]},"stage":{"anyOf":[{"type":"string","enum":["analyze","transcribe","speakers","translate","done"]},{"type":"null"}]},"progress":{"type":"number"},"error":{"type":["string","null"]},"isVideo":{"type":"boolean"},"duration":{"type":"number"},"language":{"type":"string","description":"Detected or chosen spoken language"},"speakerMode":{"type":"string","enum":["auto","single"]},"segments":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"start":{"type":"number"},"end":{"type":"number"},"speaker":{"type":["string","null"]},"text":{"type":"string"},"translation":{"type":["string","null"]},"words":{"description":"Word timings (source track), when recognised; used by karaoke captions","type":"array","items":{"type":"object","properties":{"text":{"type":"string"},"start":{"type":"number"},"end":{"type":"number"}},"required":["text","start","end"]}}},"required":["id","start","end","speaker","text","translation"]}},"speakers":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"label":{"type":"string","maxLength":60},"gender":{"type":"string","enum":["male","female","unknown"]},"lines":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"seconds":{"type":"number"}},"required":["id","label","gender","lines","seconds"]}},"translation":{"anyOf":[{"type":"object","properties":{"locale":{"type":"string"},"status":{"type":"string","enum":["processing","ready","failed"]}},"required":["locale","status"]},{"type":"null"}]},"captionOptions":{"type":"object","properties":{"style":{"default":"boxed","type":"string","enum":["clean","boxed","bold","karaoke","minimal"]},"track":{"default":"source","type":"string","enum":["source","translation"]},"position":{"default":"bottom","type":"string","enum":["bottom","middle","top"]},"size":{"default":"m","type":"string","enum":["s","m","l"]},"maxLines":{"default":2,"type":"integer","minimum":1,"maximum":3},"maxCharsPerLine":{"default":38,"type":"integer","minimum":16,"maximum":60},"color":{"default":"#ffffff","type":"string","pattern":"^#[0-9a-f]{6}$"},"highlight":{"default":"#facc15","description":"Active-word colour for the karaoke style","type":"string","pattern":"^#[0-9a-f]{6}$"},"speakerNames":{"default":false,"type":"boolean"},"aspect":{"default":"original","description":"Reframe (centre crop / pad) for Reels, TikTok and Shorts","type":"string","enum":["original","9:16","1:1","16:9"]}}},"captions":{"anyOf":[{"type":"object","properties":{"status":{"type":"string","enum":["rendering","ready","failed"]},"progress":{"type":"number"},"url":{"type":["string","null"]},"downloadUrl":{"description":"The render as a named file download (Content-Disposition attachment); `url` plays inline","type":["string","null"]},"generationId":{"anyOf":[{"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)$"},{"type":"null"}]},"error":{"type":["string","null"]},"stale":{"type":"boolean","description":"The transcript or caption options changed since this render"}},"required":["status","progress","url","generationId","error","stale"]},{"type":"null"}]},"sourceUrl":{"type":["string","null"]},"thumbnailUrl":{"type":["string","null"]},"peaks":{"type":"array","items":{"type":"number"}},"words":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"creditsCharged":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"estimateCaptionCredits":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"clientId":{"anyOf":[{"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)$"},{"type":"null"}]},"sourceName":{"type":["string","null"]}},"required":["id","createdAt","updatedAt","title","purpose","status","stage","progress","error","isVideo","duration","language","speakerMode","segments","speakers","translation","captionOptions","captions","sourceUrl","thumbnailUrl","peaks","words","creditsCharged","estimateCaptionCredits","clientId","sourceName"],"additionalProperties":{}},"example":{"id":"01990000-0000-7000-8000-000000000001","createdAt":"2026-09-19T12:00:00.000Z","updatedAt":"2026-09-19T12:00:00.000Z","data":{},"title":"example","purpose":"transcript","status":"queued","stage":"analyze","progress":1,"error":"example","isVideo":true,"duration":1,"language":"ar","speakerMode":"auto","segments":[{"id":"example","start":1,"end":1,"speaker":"example","text":"مرحباً بك في فوكلا.","translation":"example","words":[{"text":"مرحباً بك في فوكلا.","start":1,"end":1}]}],"speakers":[{"id":"example","label":"example","gender":"male","lines":-9007199254740991,"seconds":1}],"translation":{"locale":"ar-SA","status":"processing"},"captionOptions":{"style":"boxed","track":"source","position":"bottom","size":"m","maxLines":2,"maxCharsPerLine":38,"color":"#ffffff","highlight":"#facc15","speakerNames":false,"aspect":"original"},"captions":{"status":"rendering","progress":1,"url":"example","downloadUrl":"http://localhost:4000/example","generationId":"01990000-0000-7000-8000-000000000001","error":"example","stale":true},"sourceUrl":"http://localhost:4000/example","thumbnailUrl":"http://localhost:4000/example","peaks":[1],"words":-9007199254740991,"creditsCharged":-9007199254740991,"estimateCaptionCredits":-9007199254740991,"clientId":"01990000-0000-7000-8000-000000000001","sourceName":"example"}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/transcripts/{id}/segments/{segmentId}/merge","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/transcripts/{id}/segments/{segmentId}/merge","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/transcripts/{id}/segments/{segmentId}/merge","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/transcripts/{id}/segments/{segmentId}/merge","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/transcripts/{id}/segments/{segmentId}/merge","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/transcripts/{id}/segments/{segmentId}/merge","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/transcripts/{id}/segments/{segmentId}/merge","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/transcripts/{id}/segments/{segmentId}/merge","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/transcripts/{id}/segments/{segmentId}/merge","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/transcripts/{id}/segments/{segmentId}/merge","traceId":"request-id"}}}}}}},"/v1/transcripts/{id}/export":{"get":{"operationId":"exportTranscript","tags":["Speech to text"],"summary":"export Transcript","description":"Requires workspace role viewer or above. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"format","in":"query","required":true,"schema":{"type":"string","enum":["txt","docx","srt","vtt","json","csv"]}},{"name":"track","in":"query","required":false,"schema":{"default":"source","type":"string","enum":["source","translation","both"]}},{"name":"speakers","in":"query","required":false,"schema":{"type":"string"}},{"name":"timestamps","in":"query","required":false,"schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"url":{"type":"string"},"filename":{"type":"string"}},"required":["url","filename"]},"example":{"url":"example","filename":"example"}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/transcripts/{id}/export","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/transcripts/{id}/export","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/transcripts/{id}/export","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/transcripts/{id}/export","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/transcripts/{id}/export","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/transcripts/{id}/export","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/transcripts/{id}/export","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/transcripts/{id}/export","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/transcripts/{id}/export","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/transcripts/{id}/export","traceId":"request-id"}}}}}}},"/v1/transcripts/{id}/captions":{"post":{"operationId":"renderCaptions","tags":["Speech to text"],"summary":"Burn the captions into the video (MP4); the result is also a generation in the library","description":"Requires workspace role editor or above. Retry with the same Idempotency-Key and identical body. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"Idempotency-Key","in":"header","required":true,"schema":{"type":"string","maxLength":200},"example":"request-2026-001"},{"name":"X-CSRF-Token","in":"header","required":false,"description":"Required for cookie-authenticated mutations; returned by sign-in/sign-up.","schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"style":{"default":"boxed","type":"string","enum":["clean","boxed","bold","karaoke","minimal"]},"track":{"default":"source","type":"string","enum":["source","translation"]},"position":{"default":"bottom","type":"string","enum":["bottom","middle","top"]},"size":{"default":"m","type":"string","enum":["s","m","l"]},"maxLines":{"default":2,"type":"integer","minimum":1,"maximum":3},"maxCharsPerLine":{"default":38,"type":"integer","minimum":16,"maximum":60},"color":{"default":"#ffffff","type":"string","pattern":"^#[0-9a-f]{6}$"},"highlight":{"default":"#facc15","description":"Active-word colour for the karaoke style","type":"string","pattern":"^#[0-9a-f]{6}$"},"speakerNames":{"default":false,"type":"boolean"},"aspect":{"default":"original","description":"Reframe (centre crop / pad) for Reels, TikTok and Shorts","type":"string","enum":["original","9:16","1:1","16:9"]}}},"example":{"style":"boxed","track":"source","position":"bottom","size":"m","maxLines":2,"maxCharsPerLine":38,"color":"#ffffff","highlight":"#facc15","speakerNames":false,"aspect":"original"}}}},"responses":{"202":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","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)$"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"},"data":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}},"title":{"type":"string"},"purpose":{"type":"string","enum":["transcript","captions"],"description":"Which tool created it; both share the same editor and exports"},"status":{"type":"string","enum":["queued","processing","ready","failed"]},"stage":{"anyOf":[{"type":"string","enum":["analyze","transcribe","speakers","translate","done"]},{"type":"null"}]},"progress":{"type":"number"},"error":{"type":["string","null"]},"isVideo":{"type":"boolean"},"duration":{"type":"number"},"language":{"type":"string","description":"Detected or chosen spoken language"},"speakerMode":{"type":"string","enum":["auto","single"]},"segments":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"start":{"type":"number"},"end":{"type":"number"},"speaker":{"type":["string","null"]},"text":{"type":"string"},"translation":{"type":["string","null"]},"words":{"description":"Word timings (source track), when recognised; used by karaoke captions","type":"array","items":{"type":"object","properties":{"text":{"type":"string"},"start":{"type":"number"},"end":{"type":"number"}},"required":["text","start","end"]}}},"required":["id","start","end","speaker","text","translation"]}},"speakers":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"label":{"type":"string","maxLength":60},"gender":{"type":"string","enum":["male","female","unknown"]},"lines":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"seconds":{"type":"number"}},"required":["id","label","gender","lines","seconds"]}},"translation":{"anyOf":[{"type":"object","properties":{"locale":{"type":"string"},"status":{"type":"string","enum":["processing","ready","failed"]}},"required":["locale","status"]},{"type":"null"}]},"captionOptions":{"type":"object","properties":{"style":{"default":"boxed","type":"string","enum":["clean","boxed","bold","karaoke","minimal"]},"track":{"default":"source","type":"string","enum":["source","translation"]},"position":{"default":"bottom","type":"string","enum":["bottom","middle","top"]},"size":{"default":"m","type":"string","enum":["s","m","l"]},"maxLines":{"default":2,"type":"integer","minimum":1,"maximum":3},"maxCharsPerLine":{"default":38,"type":"integer","minimum":16,"maximum":60},"color":{"default":"#ffffff","type":"string","pattern":"^#[0-9a-f]{6}$"},"highlight":{"default":"#facc15","description":"Active-word colour for the karaoke style","type":"string","pattern":"^#[0-9a-f]{6}$"},"speakerNames":{"default":false,"type":"boolean"},"aspect":{"default":"original","description":"Reframe (centre crop / pad) for Reels, TikTok and Shorts","type":"string","enum":["original","9:16","1:1","16:9"]}}},"captions":{"anyOf":[{"type":"object","properties":{"status":{"type":"string","enum":["rendering","ready","failed"]},"progress":{"type":"number"},"url":{"type":["string","null"]},"downloadUrl":{"description":"The render as a named file download (Content-Disposition attachment); `url` plays inline","type":["string","null"]},"generationId":{"anyOf":[{"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)$"},{"type":"null"}]},"error":{"type":["string","null"]},"stale":{"type":"boolean","description":"The transcript or caption options changed since this render"}},"required":["status","progress","url","generationId","error","stale"]},{"type":"null"}]},"sourceUrl":{"type":["string","null"]},"thumbnailUrl":{"type":["string","null"]},"peaks":{"type":"array","items":{"type":"number"}},"words":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"creditsCharged":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"estimateCaptionCredits":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"clientId":{"anyOf":[{"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)$"},{"type":"null"}]},"sourceName":{"type":["string","null"]}},"required":["id","createdAt","updatedAt","title","purpose","status","stage","progress","error","isVideo","duration","language","speakerMode","segments","speakers","translation","captionOptions","captions","sourceUrl","thumbnailUrl","peaks","words","creditsCharged","estimateCaptionCredits","clientId","sourceName"],"additionalProperties":{}},"example":{"id":"01990000-0000-7000-8000-000000000001","createdAt":"2026-09-19T12:00:00.000Z","updatedAt":"2026-09-19T12:00:00.000Z","data":{},"title":"example","purpose":"transcript","status":"queued","stage":"analyze","progress":1,"error":"example","isVideo":true,"duration":1,"language":"ar","speakerMode":"auto","segments":[{"id":"example","start":1,"end":1,"speaker":"example","text":"مرحباً بك في فوكلا.","translation":"example","words":[{"text":"مرحباً بك في فوكلا.","start":1,"end":1}]}],"speakers":[{"id":"example","label":"example","gender":"male","lines":-9007199254740991,"seconds":1}],"translation":{"locale":"ar-SA","status":"processing"},"captionOptions":{"style":"boxed","track":"source","position":"bottom","size":"m","maxLines":2,"maxCharsPerLine":38,"color":"#ffffff","highlight":"#facc15","speakerNames":false,"aspect":"original"},"captions":{"status":"rendering","progress":1,"url":"example","downloadUrl":"http://localhost:4000/example","generationId":"01990000-0000-7000-8000-000000000001","error":"example","stale":true},"sourceUrl":"http://localhost:4000/example","thumbnailUrl":"http://localhost:4000/example","peaks":[1],"words":-9007199254740991,"creditsCharged":-9007199254740991,"estimateCaptionCredits":-9007199254740991,"clientId":"01990000-0000-7000-8000-000000000001","sourceName":"example"}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/transcripts/{id}/captions","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/transcripts/{id}/captions","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/transcripts/{id}/captions","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/transcripts/{id}/captions","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/transcripts/{id}/captions","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/transcripts/{id}/captions","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/transcripts/{id}/captions","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/transcripts/{id}/captions","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/transcripts/{id}/captions","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/transcripts/{id}/captions","traceId":"request-id"}}}}}}},"/v1/transcripts/{id}/captions/preview":{"get":{"operationId":"previewCaptionFrame","tags":["Speech to text"],"summary":"A single still frame with the captions rendered, for the style picker","description":"Requires workspace role viewer or above. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"at","in":"query","required":true,"schema":{"type":"number","minimum":0}},{"name":"style","in":"query","required":false,"schema":{"type":"string","enum":["clean","boxed","bold","karaoke","minimal"]}}],"security":[{"session":[]},{"apiKey":[]}],"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"url":{"type":"string"}},"required":["url"]},"example":{"url":"example"}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/transcripts/{id}/captions/preview","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/transcripts/{id}/captions/preview","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/transcripts/{id}/captions/preview","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/transcripts/{id}/captions/preview","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/transcripts/{id}/captions/preview","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/transcripts/{id}/captions/preview","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/transcripts/{id}/captions/preview","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/transcripts/{id}/captions/preview","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/transcripts/{id}/captions/preview","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/transcripts/{id}/captions/preview","traceId":"request-id"}}}}}}},"/v1/generations":{"get":{"operationId":"listGenerations","tags":["Generations"],"summary":"list Generations","description":"Requires workspace role viewer or above. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"cursor","in":"query","required":false,"schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"schema":{"default":25,"type":"integer","minimum":1,"maximum":100}},{"name":"q","in":"query","required":false,"schema":{"type":"string","maxLength":200}},{"name":"type","in":"query","required":false,"schema":{"type":"string","enum":["tts","voice-change","music","sfx","clean","dub","lyric-edit","voice-design","assistant","dialogue","captions","video"]}},{"name":"groupBy","in":"query","required":false,"schema":{"type":"string","enum":["day"]}},{"name":"tz","in":"query","required":false,"schema":{"default":"Asia/Riyadh","type":"string","maxLength":100}}],"security":[{"session":[]},{"apiKey":[]}],"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"items":{"type":"array","items":{"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)$"},"type":{"type":"string","enum":["tts","voice-change","music","sfx","clean","dub","lyric-edit","voice-design","assistant","dialogue","captions","video"]},"dialogue":{"description":"For dialogue generations: the script with each line's timing in the mixed file","anyOf":[{"type":"object","properties":{"lines":{"type":"array","items":{"type":"object","properties":{"speaker":{"type":"string","minLength":1,"maxLength":40,"description":"Speaker label as written in the script, e.g. Host"},"voiceId":{"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)$"},"text":{"type":"string","minLength":1,"maxLength":2000},"style":{"description":"Delivery hint, e.g. excited, whisper","type":"string","maxLength":40},"pauseAfter":{"description":"Seconds of silence after this line; default = the dialogue gap","type":"number","minimum":0,"maximum":5},"start":{"type":["number","null"]},"end":{"type":["number","null"]}},"required":["speaker","voiceId","text","start","end"]}},"speakers":{"type":"array","items":{"type":"object","properties":{"speaker":{"type":"string"},"voiceId":{"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)$"}},"required":["speaker","voiceId"]}}},"required":["lines","speakers"]},{"type":"null"}]},"clientId":{"anyOf":[{"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)$"},{"type":"null"}]},"approval":{"description":"Latest review of this generation","anyOf":[{"type":"object","properties":{"status":{"type":"string","enum":["pending","approved","changes_requested","cancelled"]},"reviewId":{"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)$"}},"required":["status","reviewId"]},{"type":"null"}]},"status":{"type":"string","enum":["queued","running","succeeded","failed","cancelled"]},"progress":{"type":"number"},"creditsReserved":{"type":"number"},"creditsCharged":{"type":"number"},"assetUrl":{"type":["string","null"]},"peaks":{"type":"array","items":{"type":"number"}},"errorCode":{"type":["string","null"]},"voice":{"anyOf":[{"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)$"},"name":{"type":"object","properties":{"ar":{"type":"string","minLength":1},"en":{"type":"string","minLength":1}},"required":["ar","en"]},"category":{"type":"string"}},"required":["id","name","category"]},{"type":"null"}]},"downloads":{"description":"Signed links per format that download a named file (Content-Disposition attachment); play `assetUrl` / `video.url` instead","type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"string"}},"mediaKind":{"description":"What the output plays as: a video (MP4) or audio","type":"string","enum":["audio","video"]},"video":{"description":"Set when the output is a video: what the player needs","anyOf":[{"type":"object","properties":{"url":{"type":"string","description":"Inline MP4 URL for playback"},"posterUrl":{"description":"Poster / first frame (JPEG) when one was made","type":["string","null"]},"aspectRatio":{"type":"string","enum":["9:16","16:9","1:1"]},"width":{"type":["number","null"]},"height":{"type":["number","null"]},"duration":{"type":["number","null"]},"projectId":{"anyOf":[{"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)$"},{"type":"null"}],"description":"The Vocla Video project it was rendered from"}},"required":["url","posterUrl","aspectRatio","width","height","duration","projectId"]},{"type":"null"}]},"sourceName":{"type":["string","null"]},"songId":{"anyOf":[{"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)$"},{"type":"null"}]},"songVersionId":{"anyOf":[{"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)$"},{"type":"null"}]},"assistantResponse":{"anyOf":[{"type":"object","properties":{"text":{"type":"string"},"transcript":{"type":"string"},"mode":{"type":"string","enum":["text","audio","realtime"]}},"required":["text","transcript","mode"]},{"type":"null"}]},"input":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}},"createdAt":{"type":"string"},"updatedAt":{"type":"string"}},"required":["id","type","status","progress","creditsReserved","creditsCharged","createdAt","updatedAt"],"additionalProperties":{}}},"nextCursor":{"type":["string","null"]},"total":{"type":"integer","minimum":0,"maximum":9007199254740991},"tz":{"type":"string"},"groups":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"array","items":{"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)$"},"type":{"type":"string","enum":["tts","voice-change","music","sfx","clean","dub","lyric-edit","voice-design","assistant","dialogue","captions","video"]},"dialogue":{"description":"For dialogue generations: the script with each line's timing in the mixed file","anyOf":[{"type":"object","properties":{"lines":{"type":"array","items":{"type":"object","properties":{"speaker":{"type":"string","minLength":1,"maxLength":40,"description":"Speaker label as written in the script, e.g. Host"},"voiceId":{"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)$"},"text":{"type":"string","minLength":1,"maxLength":2000},"style":{"description":"Delivery hint, e.g. excited, whisper","type":"string","maxLength":40},"pauseAfter":{"description":"Seconds of silence after this line; default = the dialogue gap","type":"number","minimum":0,"maximum":5},"start":{"type":["number","null"]},"end":{"type":["number","null"]}},"required":["speaker","voiceId","text","start","end"]}},"speakers":{"type":"array","items":{"type":"object","properties":{"speaker":{"type":"string"},"voiceId":{"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)$"}},"required":["speaker","voiceId"]}}},"required":["lines","speakers"]},{"type":"null"}]},"clientId":{"anyOf":[{"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)$"},{"type":"null"}]},"approval":{"description":"Latest review of this generation","anyOf":[{"type":"object","properties":{"status":{"type":"string","enum":["pending","approved","changes_requested","cancelled"]},"reviewId":{"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)$"}},"required":["status","reviewId"]},{"type":"null"}]},"status":{"type":"string","enum":["queued","running","succeeded","failed","cancelled"]},"progress":{"type":"number"},"creditsReserved":{"type":"number"},"creditsCharged":{"type":"number"},"assetUrl":{"type":["string","null"]},"peaks":{"type":"array","items":{"type":"number"}},"errorCode":{"type":["string","null"]},"voice":{"anyOf":[{"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)$"},"name":{"type":"object","properties":{"ar":{"type":"string","minLength":1},"en":{"type":"string","minLength":1}},"required":["ar","en"]},"category":{"type":"string"}},"required":["id","name","category"]},{"type":"null"}]},"downloads":{"description":"Signed links per format that download a named file (Content-Disposition attachment); play `assetUrl` / `video.url` instead","type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"string"}},"mediaKind":{"description":"What the output plays as: a video (MP4) or audio","type":"string","enum":["audio","video"]},"video":{"description":"Set when the output is a video: what the player needs","anyOf":[{"type":"object","properties":{"url":{"type":"string","description":"Inline MP4 URL for playback"},"posterUrl":{"description":"Poster / first frame (JPEG) when one was made","type":["string","null"]},"aspectRatio":{"type":"string","enum":["9:16","16:9","1:1"]},"width":{"type":["number","null"]},"height":{"type":["number","null"]},"duration":{"type":["number","null"]},"projectId":{"anyOf":[{"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)$"},{"type":"null"}],"description":"The Vocla Video project it was rendered from"}},"required":["url","posterUrl","aspectRatio","width","height","duration","projectId"]},{"type":"null"}]},"sourceName":{"type":["string","null"]},"songId":{"anyOf":[{"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)$"},{"type":"null"}]},"songVersionId":{"anyOf":[{"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)$"},{"type":"null"}]},"assistantResponse":{"anyOf":[{"type":"object","properties":{"text":{"type":"string"},"transcript":{"type":"string"},"mode":{"type":"string","enum":["text","audio","realtime"]}},"required":["text","transcript","mode"]},{"type":"null"}]},"input":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}},"createdAt":{"type":"string"},"updatedAt":{"type":"string"}},"required":["id","type","status","progress","creditsReserved","creditsCharged","createdAt","updatedAt"],"additionalProperties":{}}}}},"required":["items","nextCursor","total"]},"example":{"items":[{"id":"01990000-0000-7000-8000-000000000001","type":"tts","dialogue":{"lines":[{"speaker":"example","voiceId":"01990000-0000-7000-8000-000000000001","text":"مرحباً بك في فوكلا.","style":"example","pauseAfter":0,"start":"example","end":"example"}],"speakers":[{"speaker":"example","voiceId":"01990000-0000-7000-8000-000000000001"}]},"clientId":"01990000-0000-7000-8000-000000000001","approval":{"status":"pending","reviewId":"01990000-0000-7000-8000-000000000001"},"status":"queued","progress":1,"creditsReserved":1,"creditsCharged":1,"assetUrl":"http://localhost:4000/example","peaks":[1],"errorCode":"example","voice":{"id":"01990000-0000-7000-8000-000000000001","name":{"ar":"مثال","en":"example"},"category":"example"},"downloads":{},"mediaKind":"audio","video":{"url":"example","posterUrl":"http://localhost:4000/example","aspectRatio":"9:16","width":"example","height":"example","duration":"example","projectId":"01990000-0000-7000-8000-000000000001"},"sourceName":"example","songId":"01990000-0000-7000-8000-000000000001","songVersionId":"01990000-0000-7000-8000-000000000001","assistantResponse":{"text":"مرحباً بك في فوكلا.","transcript":"example","mode":"text"},"input":{},"createdAt":"2026-09-19T12:00:00.000Z","updatedAt":"2026-09-19T12:00:00.000Z"}],"nextCursor":"example","total":0,"tz":"example","groups":{}}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/generations","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/generations","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/generations","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/generations","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/generations","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/generations","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/generations","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/generations","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/generations","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/generations","traceId":"request-id"}}}}}}},"/v1/generations/{id}":{"get":{"operationId":"getGeneration","tags":["Generations"],"summary":"get Generation","description":"Requires workspace role viewer or above. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","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)$"},"type":{"type":"string","enum":["tts","voice-change","music","sfx","clean","dub","lyric-edit","voice-design","assistant","dialogue","captions","video"]},"dialogue":{"description":"For dialogue generations: the script with each line's timing in the mixed file","anyOf":[{"type":"object","properties":{"lines":{"type":"array","items":{"type":"object","properties":{"speaker":{"type":"string","minLength":1,"maxLength":40,"description":"Speaker label as written in the script, e.g. Host"},"voiceId":{"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)$"},"text":{"type":"string","minLength":1,"maxLength":2000},"style":{"description":"Delivery hint, e.g. excited, whisper","type":"string","maxLength":40},"pauseAfter":{"description":"Seconds of silence after this line; default = the dialogue gap","type":"number","minimum":0,"maximum":5},"start":{"type":["number","null"]},"end":{"type":["number","null"]}},"required":["speaker","voiceId","text","start","end"]}},"speakers":{"type":"array","items":{"type":"object","properties":{"speaker":{"type":"string"},"voiceId":{"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)$"}},"required":["speaker","voiceId"]}}},"required":["lines","speakers"]},{"type":"null"}]},"clientId":{"anyOf":[{"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)$"},{"type":"null"}]},"approval":{"description":"Latest review of this generation","anyOf":[{"type":"object","properties":{"status":{"type":"string","enum":["pending","approved","changes_requested","cancelled"]},"reviewId":{"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)$"}},"required":["status","reviewId"]},{"type":"null"}]},"status":{"type":"string","enum":["queued","running","succeeded","failed","cancelled"]},"progress":{"type":"number"},"creditsReserved":{"type":"number"},"creditsCharged":{"type":"number"},"assetUrl":{"type":["string","null"]},"peaks":{"type":"array","items":{"type":"number"}},"errorCode":{"type":["string","null"]},"voice":{"anyOf":[{"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)$"},"name":{"type":"object","properties":{"ar":{"type":"string","minLength":1},"en":{"type":"string","minLength":1}},"required":["ar","en"]},"category":{"type":"string"}},"required":["id","name","category"]},{"type":"null"}]},"downloads":{"description":"Signed links per format that download a named file (Content-Disposition attachment); play `assetUrl` / `video.url` instead","type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"string"}},"mediaKind":{"description":"What the output plays as: a video (MP4) or audio","type":"string","enum":["audio","video"]},"video":{"description":"Set when the output is a video: what the player needs","anyOf":[{"type":"object","properties":{"url":{"type":"string","description":"Inline MP4 URL for playback"},"posterUrl":{"description":"Poster / first frame (JPEG) when one was made","type":["string","null"]},"aspectRatio":{"type":"string","enum":["9:16","16:9","1:1"]},"width":{"type":["number","null"]},"height":{"type":["number","null"]},"duration":{"type":["number","null"]},"projectId":{"anyOf":[{"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)$"},{"type":"null"}],"description":"The Vocla Video project it was rendered from"}},"required":["url","posterUrl","aspectRatio","width","height","duration","projectId"]},{"type":"null"}]},"sourceName":{"type":["string","null"]},"songId":{"anyOf":[{"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)$"},{"type":"null"}]},"songVersionId":{"anyOf":[{"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)$"},{"type":"null"}]},"assistantResponse":{"anyOf":[{"type":"object","properties":{"text":{"type":"string"},"transcript":{"type":"string"},"mode":{"type":"string","enum":["text","audio","realtime"]}},"required":["text","transcript","mode"]},{"type":"null"}]},"input":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}},"createdAt":{"type":"string"},"updatedAt":{"type":"string"}},"required":["id","type","status","progress","creditsReserved","creditsCharged","createdAt","updatedAt"],"additionalProperties":{}},"example":{"id":"01990000-0000-7000-8000-000000000001","type":"tts","dialogue":{"lines":[{"speaker":"example","voiceId":"01990000-0000-7000-8000-000000000001","text":"مرحباً بك في فوكلا.","style":"example","pauseAfter":0,"start":"example","end":"example"}],"speakers":[{"speaker":"example","voiceId":"01990000-0000-7000-8000-000000000001"}]},"clientId":"01990000-0000-7000-8000-000000000001","approval":{"status":"pending","reviewId":"01990000-0000-7000-8000-000000000001"},"status":"queued","progress":1,"creditsReserved":1,"creditsCharged":1,"assetUrl":"http://localhost:4000/example","peaks":[1],"errorCode":"example","voice":{"id":"01990000-0000-7000-8000-000000000001","name":{"ar":"مثال","en":"example"},"category":"example"},"downloads":{},"mediaKind":"audio","video":{"url":"example","posterUrl":"http://localhost:4000/example","aspectRatio":"9:16","width":"example","height":"example","duration":"example","projectId":"01990000-0000-7000-8000-000000000001"},"sourceName":"example","songId":"01990000-0000-7000-8000-000000000001","songVersionId":"01990000-0000-7000-8000-000000000001","assistantResponse":{"text":"مرحباً بك في فوكلا.","transcript":"example","mode":"text"},"input":{},"createdAt":"2026-09-19T12:00:00.000Z","updatedAt":"2026-09-19T12:00:00.000Z"}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/generations/{id}","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/generations/{id}","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/generations/{id}","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/generations/{id}","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/generations/{id}","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/generations/{id}","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/generations/{id}","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/generations/{id}","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/generations/{id}","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/generations/{id}","traceId":"request-id"}}}}}},"delete":{"operationId":"deleteGeneration","tags":["Generations"],"summary":"delete Generation","description":"Requires workspace role editor or above. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"X-CSRF-Token","in":"header","required":false,"description":"Required for cookie-authenticated mutations; returned by sign-in/sign-up.","schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"ok":{"type":"boolean"}},"required":["ok"]},"example":{"ok":true}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/generations/{id}","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/generations/{id}","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/generations/{id}","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/generations/{id}","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/generations/{id}","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/generations/{id}","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/generations/{id}","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/generations/{id}","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/generations/{id}","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/generations/{id}","traceId":"request-id"}}}}}}},"/v1/generations/{id}/download":{"get":{"operationId":"downloadGeneration","tags":["Generations"],"summary":"download Generation","description":"Requires workspace role viewer or above. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"format","in":"query","required":false,"schema":{"default":"mp3","type":"string","enum":["mp3","ogg","wav","mp4"]}}],"security":[{"session":[]},{"apiKey":[]}],"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"url":{"type":"string"}},"required":["url"]},"example":{"url":"example"}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/generations/{id}/download","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/generations/{id}/download","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/generations/{id}/download","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/generations/{id}/download","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/generations/{id}/download","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/generations/{id}/download","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/generations/{id}/download","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/generations/{id}/download","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/generations/{id}/download","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/generations/{id}/download","traceId":"request-id"}}}}}}},"/v1/generations/{id}/transcode":{"post":{"operationId":"transcodeGeneration","tags":["Generations"],"summary":"Get an existing media derivative; WAV requires wavExport","description":"Requires workspace role viewer or above. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"X-CSRF-Token","in":"header","required":false,"description":"Required for cookie-authenticated mutations; returned by sign-in/sign-up.","schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"format":{"type":"string","enum":["mp3","ogg","wav","mp4"]}},"required":["format"]},"example":{"format":"mp3"}}}},"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"url":{"type":"string"}},"required":["url"]},"example":{"url":"example"}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/generations/{id}/transcode","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/generations/{id}/transcode","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/generations/{id}/transcode","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/generations/{id}/transcode","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/generations/{id}/transcode","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/generations/{id}/transcode","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/generations/{id}/transcode","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/generations/{id}/transcode","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/generations/{id}/transcode","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/generations/{id}/transcode","traceId":"request-id"}}}}}}},"/v1/generations/{id}/events":{"get":{"operationId":"generationEvents","tags":["Generations"],"summary":"generation Events","description":"Requires workspace role viewer or above. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"text/event-stream":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","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)$"},"type":{"type":"string","enum":["tts","voice-change","music","sfx","clean","dub","lyric-edit","voice-design","assistant","dialogue","captions","video"]},"dialogue":{"description":"For dialogue generations: the script with each line's timing in the mixed file","anyOf":[{"type":"object","properties":{"lines":{"type":"array","items":{"type":"object","properties":{"speaker":{"type":"string","minLength":1,"maxLength":40,"description":"Speaker label as written in the script, e.g. Host"},"voiceId":{"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)$"},"text":{"type":"string","minLength":1,"maxLength":2000},"style":{"description":"Delivery hint, e.g. excited, whisper","type":"string","maxLength":40},"pauseAfter":{"description":"Seconds of silence after this line; default = the dialogue gap","type":"number","minimum":0,"maximum":5},"start":{"type":["number","null"]},"end":{"type":["number","null"]}},"required":["speaker","voiceId","text","start","end"]}},"speakers":{"type":"array","items":{"type":"object","properties":{"speaker":{"type":"string"},"voiceId":{"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)$"}},"required":["speaker","voiceId"]}}},"required":["lines","speakers"]},{"type":"null"}]},"clientId":{"anyOf":[{"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)$"},{"type":"null"}]},"approval":{"description":"Latest review of this generation","anyOf":[{"type":"object","properties":{"status":{"type":"string","enum":["pending","approved","changes_requested","cancelled"]},"reviewId":{"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)$"}},"required":["status","reviewId"]},{"type":"null"}]},"status":{"type":"string","enum":["queued","running","succeeded","failed","cancelled"]},"progress":{"type":"number"},"creditsReserved":{"type":"number"},"creditsCharged":{"type":"number"},"assetUrl":{"type":["string","null"]},"peaks":{"type":"array","items":{"type":"number"}},"errorCode":{"type":["string","null"]},"voice":{"anyOf":[{"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)$"},"name":{"type":"object","properties":{"ar":{"type":"string","minLength":1},"en":{"type":"string","minLength":1}},"required":["ar","en"]},"category":{"type":"string"}},"required":["id","name","category"]},{"type":"null"}]},"downloads":{"description":"Signed links per format that download a named file (Content-Disposition attachment); play `assetUrl` / `video.url` instead","type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"string"}},"mediaKind":{"description":"What the output plays as: a video (MP4) or audio","type":"string","enum":["audio","video"]},"video":{"description":"Set when the output is a video: what the player needs","anyOf":[{"type":"object","properties":{"url":{"type":"string","description":"Inline MP4 URL for playback"},"posterUrl":{"description":"Poster / first frame (JPEG) when one was made","type":["string","null"]},"aspectRatio":{"type":"string","enum":["9:16","16:9","1:1"]},"width":{"type":["number","null"]},"height":{"type":["number","null"]},"duration":{"type":["number","null"]},"projectId":{"anyOf":[{"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)$"},{"type":"null"}],"description":"The Vocla Video project it was rendered from"}},"required":["url","posterUrl","aspectRatio","width","height","duration","projectId"]},{"type":"null"}]},"sourceName":{"type":["string","null"]},"songId":{"anyOf":[{"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)$"},{"type":"null"}]},"songVersionId":{"anyOf":[{"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)$"},{"type":"null"}]},"assistantResponse":{"anyOf":[{"type":"object","properties":{"text":{"type":"string"},"transcript":{"type":"string"},"mode":{"type":"string","enum":["text","audio","realtime"]}},"required":["text","transcript","mode"]},{"type":"null"}]},"input":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}},"createdAt":{"type":"string"},"updatedAt":{"type":"string"}},"required":["id","type","status","progress","creditsReserved","creditsCharged","createdAt","updatedAt"],"additionalProperties":{}},"example":{"id":"01990000-0000-7000-8000-000000000001","type":"tts","dialogue":{"lines":[{"speaker":"example","voiceId":"01990000-0000-7000-8000-000000000001","text":"مرحباً بك في فوكلا.","style":"example","pauseAfter":0,"start":"example","end":"example"}],"speakers":[{"speaker":"example","voiceId":"01990000-0000-7000-8000-000000000001"}]},"clientId":"01990000-0000-7000-8000-000000000001","approval":{"status":"pending","reviewId":"01990000-0000-7000-8000-000000000001"},"status":"queued","progress":1,"creditsReserved":1,"creditsCharged":1,"assetUrl":"http://localhost:4000/example","peaks":[1],"errorCode":"example","voice":{"id":"01990000-0000-7000-8000-000000000001","name":{"ar":"مثال","en":"example"},"category":"example"},"downloads":{},"mediaKind":"audio","video":{"url":"example","posterUrl":"http://localhost:4000/example","aspectRatio":"9:16","width":"example","height":"example","duration":"example","projectId":"01990000-0000-7000-8000-000000000001"},"sourceName":"example","songId":"01990000-0000-7000-8000-000000000001","songVersionId":"01990000-0000-7000-8000-000000000001","assistantResponse":{"text":"مرحباً بك في فوكلا.","transcript":"example","mode":"text"},"input":{},"createdAt":"2026-09-19T12:00:00.000Z","updatedAt":"2026-09-19T12:00:00.000Z"}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/generations/{id}/events","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/generations/{id}/events","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/generations/{id}/events","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/generations/{id}/events","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/generations/{id}/events","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/generations/{id}/events","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/generations/{id}/events","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/generations/{id}/events","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/generations/{id}/events","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/generations/{id}/events","traceId":"request-id"}}}}}}},"/v1/generations/{id}/cancel":{"post":{"operationId":"cancelGeneration","tags":["Generations"],"summary":"cancel Generation","description":"Requires workspace role editor or above. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"X-CSRF-Token","in":"header","required":false,"description":"Required for cookie-authenticated mutations; returned by sign-in/sign-up.","schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","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)$"},"type":{"type":"string","enum":["tts","voice-change","music","sfx","clean","dub","lyric-edit","voice-design","assistant","dialogue","captions","video"]},"dialogue":{"description":"For dialogue generations: the script with each line's timing in the mixed file","anyOf":[{"type":"object","properties":{"lines":{"type":"array","items":{"type":"object","properties":{"speaker":{"type":"string","minLength":1,"maxLength":40,"description":"Speaker label as written in the script, e.g. Host"},"voiceId":{"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)$"},"text":{"type":"string","minLength":1,"maxLength":2000},"style":{"description":"Delivery hint, e.g. excited, whisper","type":"string","maxLength":40},"pauseAfter":{"description":"Seconds of silence after this line; default = the dialogue gap","type":"number","minimum":0,"maximum":5},"start":{"type":["number","null"]},"end":{"type":["number","null"]}},"required":["speaker","voiceId","text","start","end"]}},"speakers":{"type":"array","items":{"type":"object","properties":{"speaker":{"type":"string"},"voiceId":{"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)$"}},"required":["speaker","voiceId"]}}},"required":["lines","speakers"]},{"type":"null"}]},"clientId":{"anyOf":[{"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)$"},{"type":"null"}]},"approval":{"description":"Latest review of this generation","anyOf":[{"type":"object","properties":{"status":{"type":"string","enum":["pending","approved","changes_requested","cancelled"]},"reviewId":{"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)$"}},"required":["status","reviewId"]},{"type":"null"}]},"status":{"type":"string","enum":["queued","running","succeeded","failed","cancelled"]},"progress":{"type":"number"},"creditsReserved":{"type":"number"},"creditsCharged":{"type":"number"},"assetUrl":{"type":["string","null"]},"peaks":{"type":"array","items":{"type":"number"}},"errorCode":{"type":["string","null"]},"voice":{"anyOf":[{"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)$"},"name":{"type":"object","properties":{"ar":{"type":"string","minLength":1},"en":{"type":"string","minLength":1}},"required":["ar","en"]},"category":{"type":"string"}},"required":["id","name","category"]},{"type":"null"}]},"downloads":{"description":"Signed links per format that download a named file (Content-Disposition attachment); play `assetUrl` / `video.url` instead","type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"string"}},"mediaKind":{"description":"What the output plays as: a video (MP4) or audio","type":"string","enum":["audio","video"]},"video":{"description":"Set when the output is a video: what the player needs","anyOf":[{"type":"object","properties":{"url":{"type":"string","description":"Inline MP4 URL for playback"},"posterUrl":{"description":"Poster / first frame (JPEG) when one was made","type":["string","null"]},"aspectRatio":{"type":"string","enum":["9:16","16:9","1:1"]},"width":{"type":["number","null"]},"height":{"type":["number","null"]},"duration":{"type":["number","null"]},"projectId":{"anyOf":[{"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)$"},{"type":"null"}],"description":"The Vocla Video project it was rendered from"}},"required":["url","posterUrl","aspectRatio","width","height","duration","projectId"]},{"type":"null"}]},"sourceName":{"type":["string","null"]},"songId":{"anyOf":[{"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)$"},{"type":"null"}]},"songVersionId":{"anyOf":[{"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)$"},{"type":"null"}]},"assistantResponse":{"anyOf":[{"type":"object","properties":{"text":{"type":"string"},"transcript":{"type":"string"},"mode":{"type":"string","enum":["text","audio","realtime"]}},"required":["text","transcript","mode"]},{"type":"null"}]},"input":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}},"createdAt":{"type":"string"},"updatedAt":{"type":"string"}},"required":["id","type","status","progress","creditsReserved","creditsCharged","createdAt","updatedAt"],"additionalProperties":{}},"example":{"id":"01990000-0000-7000-8000-000000000001","type":"tts","dialogue":{"lines":[{"speaker":"example","voiceId":"01990000-0000-7000-8000-000000000001","text":"مرحباً بك في فوكلا.","style":"example","pauseAfter":0,"start":"example","end":"example"}],"speakers":[{"speaker":"example","voiceId":"01990000-0000-7000-8000-000000000001"}]},"clientId":"01990000-0000-7000-8000-000000000001","approval":{"status":"pending","reviewId":"01990000-0000-7000-8000-000000000001"},"status":"queued","progress":1,"creditsReserved":1,"creditsCharged":1,"assetUrl":"http://localhost:4000/example","peaks":[1],"errorCode":"example","voice":{"id":"01990000-0000-7000-8000-000000000001","name":{"ar":"مثال","en":"example"},"category":"example"},"downloads":{},"mediaKind":"audio","video":{"url":"example","posterUrl":"http://localhost:4000/example","aspectRatio":"9:16","width":"example","height":"example","duration":"example","projectId":"01990000-0000-7000-8000-000000000001"},"sourceName":"example","songId":"01990000-0000-7000-8000-000000000001","songVersionId":"01990000-0000-7000-8000-000000000001","assistantResponse":{"text":"مرحباً بك في فوكلا.","transcript":"example","mode":"text"},"input":{},"createdAt":"2026-09-19T12:00:00.000Z","updatedAt":"2026-09-19T12:00:00.000Z"}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/generations/{id}/cancel","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/generations/{id}/cancel","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/generations/{id}/cancel","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/generations/{id}/cancel","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/generations/{id}/cancel","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/generations/{id}/cancel","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/generations/{id}/cancel","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/generations/{id}/cancel","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/generations/{id}/cancel","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/generations/{id}/cancel","traceId":"request-id"}}}}}}},"/v1/uploads":{"post":{"operationId":"createUpload","tags":["Voice changer"],"summary":"create Upload","description":"Requires workspace role viewer or above. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"X-CSRF-Token","in":"header","required":false,"description":"Required for cookie-authenticated mutations; returned by sign-in/sign-up.","schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"filename":{"type":"string","minLength":1,"maxLength":200},"contentType":{"type":"string","enum":["audio/wav","audio/mpeg","audio/ogg","audio/webm","audio/mp4","video/mp4","video/webm","video/quicktime","image/jpeg","image/png","image/webp"]},"size":{"type":"integer","exclusiveMinimum":0,"maximum":524288000},"purpose":{"description":"video-edit = a clip for the video edit studio (sound optional, MOV accepted)","type":"string","enum":["video-edit"]}},"required":["filename","contentType","size"]},"example":{"filename":"example","contentType":"audio/wav","size":1,"purpose":"video-edit"}}}},"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","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)$"},"uploadId":{"type":"string"},"partSize":{"type":"number"},"parts":{"type":"array","items":{"type":"object","properties":{"partNumber":{"type":"number"},"url":{"type":"string"}},"required":["partNumber","url"]}}},"required":["id","uploadId","partSize","parts"]},"example":{"id":"01990000-0000-7000-8000-000000000001","uploadId":"example","partSize":1,"parts":[{"partNumber":1,"url":"example"}]}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/uploads","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/uploads","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/uploads","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/uploads","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/uploads","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/uploads","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/uploads","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/uploads","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/uploads","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/uploads","traceId":"request-id"}}}}}}},"/v1/uploads/{id}/parts":{"post":{"operationId":"signUploadParts","tags":["Voice changer"],"summary":"sign Upload Parts","description":"Requires workspace role viewer or above. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"X-CSRF-Token","in":"header","required":false,"description":"Required for cookie-authenticated mutations; returned by sign-in/sign-up.","schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"partNumbers":{"maxItems":100,"type":"array","items":{"type":"integer","minimum":1,"maximum":10000}}},"required":["partNumbers"]},"example":{"partNumbers":[1]}}}},"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"parts":{"type":"array","items":{"type":"object","properties":{"partNumber":{"type":"number"},"url":{"type":"string"}},"required":["partNumber","url"]}}},"required":["parts"]},"example":{"parts":[{"partNumber":1,"url":"example"}]}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/uploads/{id}/parts","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/uploads/{id}/parts","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/uploads/{id}/parts","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/uploads/{id}/parts","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/uploads/{id}/parts","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/uploads/{id}/parts","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/uploads/{id}/parts","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/uploads/{id}/parts","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/uploads/{id}/parts","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/uploads/{id}/parts","traceId":"request-id"}}}}}}},"/v1/uploads/{id}/complete":{"post":{"operationId":"completeUpload","tags":["Voice changer"],"summary":"complete Upload","description":"Requires workspace role viewer or above. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"X-CSRF-Token","in":"header","required":false,"description":"Required for cookie-authenticated mutations; returned by sign-in/sign-up.","schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"parts":{"minItems":1,"maxItems":10000,"type":"array","items":{"type":"object","properties":{"partNumber":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"etag":{"type":"string","minLength":1,"maxLength":200}},"required":["partNumber","etag"]}}},"required":["parts"]},"example":{"parts":[{"partNumber":1,"etag":"example"}]}}}},"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","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)$"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"},"data":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}}},"required":["id","createdAt","updatedAt"],"additionalProperties":{}},"example":{"id":"01990000-0000-7000-8000-000000000001","createdAt":"2026-09-19T12:00:00.000Z","updatedAt":"2026-09-19T12:00:00.000Z","data":{}}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/uploads/{id}/complete","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/uploads/{id}/complete","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/uploads/{id}/complete","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/uploads/{id}/complete","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/uploads/{id}/complete","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/uploads/{id}/complete","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/uploads/{id}/complete","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/uploads/{id}/complete","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/uploads/{id}/complete","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/uploads/{id}/complete","traceId":"request-id"}}}}}}},"/v1/uploads/{id}":{"get":{"operationId":"getUpload","tags":["Voice changer"],"summary":"get Upload","description":"Requires workspace role viewer or above. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","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)$"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"},"data":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}}},"required":["id","createdAt","updatedAt"],"additionalProperties":{}},"example":{"id":"01990000-0000-7000-8000-000000000001","createdAt":"2026-09-19T12:00:00.000Z","updatedAt":"2026-09-19T12:00:00.000Z","data":{}}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/uploads/{id}","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/uploads/{id}","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/uploads/{id}","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/uploads/{id}","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/uploads/{id}","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/uploads/{id}","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/uploads/{id}","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/uploads/{id}","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/uploads/{id}","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/uploads/{id}","traceId":"request-id"}}}}}},"delete":{"operationId":"deleteUpload","tags":["Voice changer"],"summary":"delete Upload","description":"Requires workspace role editor or above. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"X-CSRF-Token","in":"header","required":false,"description":"Required for cookie-authenticated mutations; returned by sign-in/sign-up.","schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"ok":{"type":"boolean"}},"required":["ok"]},"example":{"ok":true}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/uploads/{id}","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/uploads/{id}","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/uploads/{id}","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/uploads/{id}","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/uploads/{id}","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/uploads/{id}","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/uploads/{id}","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/uploads/{id}","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/uploads/{id}","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/uploads/{id}","traceId":"request-id"}}}}}}},"/v1/presets":{"get":{"operationId":"listPresets","tags":["Text to speech"],"summary":"list Presets","description":"Requires workspace role viewer or above. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"cursor","in":"query","required":false,"schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"schema":{"default":25,"type":"integer","minimum":1,"maximum":100}},{"name":"q","in":"query","required":false,"schema":{"type":"string","maxLength":200}}],"security":[{"session":[]},{"apiKey":[]}],"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"items":{"type":"array","items":{"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)$"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"},"data":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}}},"required":["id","createdAt","updatedAt"],"additionalProperties":{}}},"nextCursor":{"type":["string","null"]}},"required":["items","nextCursor"]},"example":{"items":[{"id":"01990000-0000-7000-8000-000000000001","createdAt":"2026-09-19T12:00:00.000Z","updatedAt":"2026-09-19T12:00:00.000Z","data":{}}],"nextCursor":"example"}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/presets","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/presets","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/presets","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/presets","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/presets","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/presets","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/presets","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/presets","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/presets","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/presets","traceId":"request-id"}}}}}},"post":{"operationId":"createPreset","tags":["Text to speech"],"summary":"create Preset","description":"Requires workspace role editor or above. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"X-CSRF-Token","in":"header","required":false,"description":"Required for cookie-authenticated mutations; returned by sign-in/sign-up.","schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":100},"useCase":{"type":"string","minLength":1,"maxLength":100},"type":{"type":"string","enum":["tts","voice-change","music","sfx","clean","dub","lyric-edit","voice-design","assistant","dialogue","captions","video"]},"params":{"type":"object","properties":{"speed":{"default":50,"type":"number","minimum":0,"maximum":100},"consistency":{"default":50,"type":"number","minimum":0,"maximum":100},"voiceMatch":{"default":75,"type":"number","minimum":0,"maximum":100},"expressiveness":{"default":50,"type":"number","minimum":0,"maximum":100},"clarity":{"default":75,"type":"number","minimum":0,"maximum":100},"energyMode":{"default":"normal","type":"string","enum":["normal","boost"]}}},"voiceId":{"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)$"},"productModelId":{"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)$"}},"required":["name","type","params"]},"example":{"name":"Noura","useCase":"example","type":"tts","params":{"speed":50,"consistency":50,"voiceMatch":75,"expressiveness":50,"clarity":75,"energyMode":"normal"},"voiceId":"01990000-0000-7000-8000-000000000001","productModelId":"01990000-0000-7000-8000-000000000001"}}}},"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","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)$"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"},"data":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}}},"required":["id","createdAt","updatedAt"],"additionalProperties":{}},"example":{"id":"01990000-0000-7000-8000-000000000001","createdAt":"2026-09-19T12:00:00.000Z","updatedAt":"2026-09-19T12:00:00.000Z","data":{}}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/presets","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/presets","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/presets","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/presets","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/presets","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/presets","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/presets","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/presets","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/presets","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/presets","traceId":"request-id"}}}}}}},"/v1/presets/{id}":{"get":{"operationId":"getPreset","tags":["Text to speech"],"summary":"get Preset","description":"Requires workspace role viewer or above. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","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)$"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"},"data":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}}},"required":["id","createdAt","updatedAt"],"additionalProperties":{}},"example":{"id":"01990000-0000-7000-8000-000000000001","createdAt":"2026-09-19T12:00:00.000Z","updatedAt":"2026-09-19T12:00:00.000Z","data":{}}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/presets/{id}","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/presets/{id}","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/presets/{id}","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/presets/{id}","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/presets/{id}","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/presets/{id}","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/presets/{id}","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/presets/{id}","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/presets/{id}","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/presets/{id}","traceId":"request-id"}}}}}},"patch":{"operationId":"updatePreset","tags":["Text to speech"],"summary":"update Preset","description":"Requires workspace role editor or above. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"X-CSRF-Token","in":"header","required":false,"description":"Required for cookie-authenticated mutations; returned by sign-in/sign-up.","schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":100},"useCase":{"type":"string","minLength":1,"maxLength":100},"type":{"type":"string","enum":["tts","voice-change","music","sfx","clean","dub","lyric-edit","voice-design","assistant","dialogue","captions","video"]},"params":{"type":"object","properties":{"speed":{"default":50,"type":"number","minimum":0,"maximum":100},"consistency":{"default":50,"type":"number","minimum":0,"maximum":100},"voiceMatch":{"default":75,"type":"number","minimum":0,"maximum":100},"expressiveness":{"default":50,"type":"number","minimum":0,"maximum":100},"clarity":{"default":75,"type":"number","minimum":0,"maximum":100},"energyMode":{"default":"normal","type":"string","enum":["normal","boost"]}}},"voiceId":{"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)$"},"productModelId":{"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)$"}}},"example":{"name":"Noura","useCase":"example","type":"tts","params":{"speed":50,"consistency":50,"voiceMatch":75,"expressiveness":50,"clarity":75,"energyMode":"normal"},"voiceId":"01990000-0000-7000-8000-000000000001","productModelId":"01990000-0000-7000-8000-000000000001"}}}},"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","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)$"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"},"data":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}}},"required":["id","createdAt","updatedAt"],"additionalProperties":{}},"example":{"id":"01990000-0000-7000-8000-000000000001","createdAt":"2026-09-19T12:00:00.000Z","updatedAt":"2026-09-19T12:00:00.000Z","data":{}}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/presets/{id}","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/presets/{id}","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/presets/{id}","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/presets/{id}","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/presets/{id}","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/presets/{id}","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/presets/{id}","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/presets/{id}","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/presets/{id}","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/presets/{id}","traceId":"request-id"}}}}}},"delete":{"operationId":"deletePreset","tags":["Text to speech"],"summary":"delete Preset","description":"Requires workspace role editor or above. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"X-CSRF-Token","in":"header","required":false,"description":"Required for cookie-authenticated mutations; returned by sign-in/sign-up.","schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"ok":{"type":"boolean"}},"required":["ok"]},"example":{"ok":true}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/presets/{id}","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/presets/{id}","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/presets/{id}","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/presets/{id}","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/presets/{id}","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/presets/{id}","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/presets/{id}","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/presets/{id}","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/presets/{id}","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/presets/{id}","traceId":"request-id"}}}}}}},"/v1/songs":{"get":{"operationId":"listSongs","tags":["SFX & music"],"summary":"list Songs","description":"Requires workspace role viewer or above. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"cursor","in":"query","required":false,"schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"schema":{"default":25,"type":"integer","minimum":1,"maximum":100}},{"name":"q","in":"query","required":false,"schema":{"type":"string","maxLength":200}}],"security":[{"session":[]},{"apiKey":[]}],"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"items":{"type":"array","items":{"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)$"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"},"data":{"type":"object","properties":{"title":{"type":"string","minLength":1,"maxLength":200},"genre":{"type":"string","minLength":1,"maxLength":100},"moods":{"maxItems":20,"type":"array","items":{"type":"string"}},"description":{"type":"string","maxLength":2000},"favourite":{"type":"boolean"},"styles":{"type":"object","properties":{"include":{"type":"array","items":{"type":"string"}},"exclude":{"type":"array","items":{"type":"string"}}},"required":["include","exclude"]},"generationId":{"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)$"},"assetId":{"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)$"},"instrumental":{"type":"boolean"}},"required":["title"]},"currentVersionId":{"anyOf":[{"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)$"},{"type":"null"}]}},"required":["id","createdAt","updatedAt","data"],"additionalProperties":{}}},"nextCursor":{"type":["string","null"]}},"required":["items","nextCursor"]},"example":{"items":[{"id":"01990000-0000-7000-8000-000000000001","createdAt":"2026-09-19T12:00:00.000Z","updatedAt":"2026-09-19T12:00:00.000Z","data":{"title":"example","genre":"example","moods":["example"],"description":"example","favourite":true,"styles":{"include":["example"],"exclude":["example"]},"generationId":"01990000-0000-7000-8000-000000000001","assetId":"01990000-0000-7000-8000-000000000001","instrumental":true},"currentVersionId":"01990000-0000-7000-8000-000000000001"}],"nextCursor":"example"}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/songs","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/songs","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/songs","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/songs","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/songs","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/songs","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/songs","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/songs","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/songs","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/songs","traceId":"request-id"}}}}}},"post":{"operationId":"createSong","tags":["SFX & music"],"summary":"create Song","description":"Requires workspace role editor or above. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"X-CSRF-Token","in":"header","required":false,"description":"Required for cookie-authenticated mutations; returned by sign-in/sign-up.","schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"title":{"type":"string","minLength":1,"maxLength":200},"genre":{"type":"string","minLength":1,"maxLength":100},"moods":{"maxItems":20,"type":"array","items":{"type":"string"}},"description":{"type":"string","maxLength":2000},"favourite":{"type":"boolean"},"styles":{"type":"object","properties":{"include":{"type":"array","items":{"type":"string"}},"exclude":{"type":"array","items":{"type":"string"}}},"required":["include","exclude"]}},"required":["title"]},"example":{"title":"example","genre":"example","moods":["example"],"description":"example","favourite":true,"styles":{"include":["example"],"exclude":["example"]}}}}},"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","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)$"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"},"data":{"type":"object","properties":{"title":{"type":"string","minLength":1,"maxLength":200},"genre":{"type":"string","minLength":1,"maxLength":100},"moods":{"maxItems":20,"type":"array","items":{"type":"string"}},"description":{"type":"string","maxLength":2000},"favourite":{"type":"boolean"},"styles":{"type":"object","properties":{"include":{"type":"array","items":{"type":"string"}},"exclude":{"type":"array","items":{"type":"string"}}},"required":["include","exclude"]},"generationId":{"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)$"},"assetId":{"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)$"},"instrumental":{"type":"boolean"}},"required":["title"]},"currentVersionId":{"anyOf":[{"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)$"},{"type":"null"}]}},"required":["id","createdAt","updatedAt","data"],"additionalProperties":{}},"example":{"id":"01990000-0000-7000-8000-000000000001","createdAt":"2026-09-19T12:00:00.000Z","updatedAt":"2026-09-19T12:00:00.000Z","data":{"title":"example","genre":"example","moods":["example"],"description":"example","favourite":true,"styles":{"include":["example"],"exclude":["example"]},"generationId":"01990000-0000-7000-8000-000000000001","assetId":"01990000-0000-7000-8000-000000000001","instrumental":true},"currentVersionId":"01990000-0000-7000-8000-000000000001"}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/songs","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/songs","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/songs","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/songs","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/songs","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/songs","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/songs","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/songs","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/songs","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/songs","traceId":"request-id"}}}}}}},"/v1/songs/{id}":{"get":{"operationId":"getSong","tags":["SFX & music"],"summary":"get Song","description":"Requires workspace role viewer or above. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","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)$"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"},"data":{"type":"object","properties":{"title":{"type":"string","minLength":1,"maxLength":200},"genre":{"type":"string","minLength":1,"maxLength":100},"moods":{"maxItems":20,"type":"array","items":{"type":"string"}},"description":{"type":"string","maxLength":2000},"favourite":{"type":"boolean"},"styles":{"type":"object","properties":{"include":{"type":"array","items":{"type":"string"}},"exclude":{"type":"array","items":{"type":"string"}}},"required":["include","exclude"]},"generationId":{"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)$"},"assetId":{"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)$"},"instrumental":{"type":"boolean"}},"required":["title"]},"currentVersionId":{"anyOf":[{"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)$"},{"type":"null"}]}},"required":["id","createdAt","updatedAt","data"],"additionalProperties":{}},"example":{"id":"01990000-0000-7000-8000-000000000001","createdAt":"2026-09-19T12:00:00.000Z","updatedAt":"2026-09-19T12:00:00.000Z","data":{"title":"example","genre":"example","moods":["example"],"description":"example","favourite":true,"styles":{"include":["example"],"exclude":["example"]},"generationId":"01990000-0000-7000-8000-000000000001","assetId":"01990000-0000-7000-8000-000000000001","instrumental":true},"currentVersionId":"01990000-0000-7000-8000-000000000001"}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/songs/{id}","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/songs/{id}","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/songs/{id}","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/songs/{id}","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/songs/{id}","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/songs/{id}","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/songs/{id}","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/songs/{id}","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/songs/{id}","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/songs/{id}","traceId":"request-id"}}}}}},"patch":{"operationId":"updateSong","tags":["SFX & music"],"summary":"update Song","description":"Requires workspace role editor or above. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"X-CSRF-Token","in":"header","required":false,"description":"Required for cookie-authenticated mutations; returned by sign-in/sign-up.","schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"title":{"type":"string","minLength":1,"maxLength":200},"genre":{"type":"string","minLength":1,"maxLength":100},"moods":{"maxItems":20,"type":"array","items":{"type":"string"}},"description":{"type":"string","maxLength":2000},"favourite":{"type":"boolean"},"styles":{"type":"object","properties":{"include":{"type":"array","items":{"type":"string"}},"exclude":{"type":"array","items":{"type":"string"}}},"required":["include","exclude"]}}},"example":{"title":"example","genre":"example","moods":["example"],"description":"example","favourite":true,"styles":{"include":["example"],"exclude":["example"]}}}}},"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","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)$"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"},"data":{"type":"object","properties":{"title":{"type":"string","minLength":1,"maxLength":200},"genre":{"type":"string","minLength":1,"maxLength":100},"moods":{"maxItems":20,"type":"array","items":{"type":"string"}},"description":{"type":"string","maxLength":2000},"favourite":{"type":"boolean"},"styles":{"type":"object","properties":{"include":{"type":"array","items":{"type":"string"}},"exclude":{"type":"array","items":{"type":"string"}}},"required":["include","exclude"]},"generationId":{"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)$"},"assetId":{"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)$"},"instrumental":{"type":"boolean"}},"required":["title"]},"currentVersionId":{"anyOf":[{"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)$"},{"type":"null"}]}},"required":["id","createdAt","updatedAt","data"],"additionalProperties":{}},"example":{"id":"01990000-0000-7000-8000-000000000001","createdAt":"2026-09-19T12:00:00.000Z","updatedAt":"2026-09-19T12:00:00.000Z","data":{"title":"example","genre":"example","moods":["example"],"description":"example","favourite":true,"styles":{"include":["example"],"exclude":["example"]},"generationId":"01990000-0000-7000-8000-000000000001","assetId":"01990000-0000-7000-8000-000000000001","instrumental":true},"currentVersionId":"01990000-0000-7000-8000-000000000001"}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/songs/{id}","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/songs/{id}","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/songs/{id}","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/songs/{id}","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/songs/{id}","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/songs/{id}","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/songs/{id}","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/songs/{id}","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/songs/{id}","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/songs/{id}","traceId":"request-id"}}}}}},"delete":{"operationId":"deleteSong","tags":["SFX & music"],"summary":"delete Song","description":"Requires workspace role editor or above. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"X-CSRF-Token","in":"header","required":false,"description":"Required for cookie-authenticated mutations; returned by sign-in/sign-up.","schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"ok":{"type":"boolean"}},"required":["ok"]},"example":{"ok":true}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/songs/{id}","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/songs/{id}","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/songs/{id}","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/songs/{id}","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/songs/{id}","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/songs/{id}","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/songs/{id}","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/songs/{id}","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/songs/{id}","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/songs/{id}","traceId":"request-id"}}}}}}},"/v1/songs/{id}/versions":{"get":{"operationId":"listSongVersions","tags":["SFX & music"],"summary":"list Song Versions","description":"Requires workspace role viewer or above. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"cursor","in":"query","required":false,"schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"schema":{"default":25,"type":"integer","minimum":1,"maximum":100}},{"name":"q","in":"query","required":false,"schema":{"type":"string","maxLength":200}}],"security":[{"session":[]},{"apiKey":[]}],"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"items":{"type":"array","items":{"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)$"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"},"data":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}},"sections":{"type":"array","items":{"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)$"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"},"data":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}}},"required":["id","createdAt","updatedAt"],"additionalProperties":{}}},"audio":{"anyOf":[{"type":"object","properties":{"assetUrl":{"type":"string"},"downloads":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"string"}},"peaks":{"type":"array","items":{"type":"number"}}},"required":["assetUrl","downloads","peaks"]},{"type":"null"}]}},"required":["id","createdAt","updatedAt","sections","audio"],"additionalProperties":{}}},"nextCursor":{"type":["string","null"]}},"required":["items","nextCursor"]},"example":{"items":[{"id":"01990000-0000-7000-8000-000000000001","createdAt":"2026-09-19T12:00:00.000Z","updatedAt":"2026-09-19T12:00:00.000Z","data":{},"sections":[{"id":"01990000-0000-7000-8000-000000000001","createdAt":"2026-09-19T12:00:00.000Z","updatedAt":"2026-09-19T12:00:00.000Z","data":{}}],"audio":{"assetUrl":"http://localhost:4000/example","downloads":{},"peaks":[1]}}],"nextCursor":"example"}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/songs/{id}/versions","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/songs/{id}/versions","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/songs/{id}/versions","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/songs/{id}/versions","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/songs/{id}/versions","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/songs/{id}/versions","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/songs/{id}/versions","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/songs/{id}/versions","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/songs/{id}/versions","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/songs/{id}/versions","traceId":"request-id"}}}}}}},"/v1/songs/{id}/versions/{vid}":{"get":{"operationId":"getSongVersion","tags":["SFX & music"],"summary":"get Song Version","description":"Requires workspace role viewer or above. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"vid","in":"path","required":true,"schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","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)$"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"},"data":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}},"sections":{"type":"array","items":{"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)$"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"},"data":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}}},"required":["id","createdAt","updatedAt"],"additionalProperties":{}}},"audio":{"anyOf":[{"type":"object","properties":{"assetUrl":{"type":"string"},"downloads":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"string"}},"peaks":{"type":"array","items":{"type":"number"}}},"required":["assetUrl","downloads","peaks"]},{"type":"null"}]}},"required":["id","createdAt","updatedAt","sections","audio"],"additionalProperties":{}},"example":{"id":"01990000-0000-7000-8000-000000000001","createdAt":"2026-09-19T12:00:00.000Z","updatedAt":"2026-09-19T12:00:00.000Z","data":{},"sections":[{"id":"01990000-0000-7000-8000-000000000001","createdAt":"2026-09-19T12:00:00.000Z","updatedAt":"2026-09-19T12:00:00.000Z","data":{}}],"audio":{"assetUrl":"http://localhost:4000/example","downloads":{},"peaks":[1]}}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/songs/{id}/versions/{vid}","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/songs/{id}/versions/{vid}","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/songs/{id}/versions/{vid}","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/songs/{id}/versions/{vid}","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/songs/{id}/versions/{vid}","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/songs/{id}/versions/{vid}","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/songs/{id}/versions/{vid}","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/songs/{id}/versions/{vid}","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/songs/{id}/versions/{vid}","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/songs/{id}/versions/{vid}","traceId":"request-id"}}}}}}},"/v1/songs/{id}/sections":{"post":{"operationId":"addSongSection","tags":["SFX & music"],"summary":"add Song Section","description":"Requires workspace role editor or above. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"X-CSRF-Token","in":"header","required":false,"description":"Required for cookie-authenticated mutations; returned by sign-in/sign-up.","schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"versionId":{"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)$"},"title":{"type":"string","minLength":1,"maxLength":100},"lyrics":{"default":"","type":"string","maxLength":10000},"index":{"type":"integer","minimum":0,"maximum":500},"start":{"default":0,"type":"number","minimum":0},"end":{"default":0,"type":"number","minimum":0}},"required":["title"]},"example":{"versionId":"01990000-0000-7000-8000-000000000001","title":"example","lyrics":"","index":0,"start":0,"end":0}}}},"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","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)$"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"},"data":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}}},"required":["id","createdAt","updatedAt"],"additionalProperties":{}},"example":{"id":"01990000-0000-7000-8000-000000000001","createdAt":"2026-09-19T12:00:00.000Z","updatedAt":"2026-09-19T12:00:00.000Z","data":{}}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/songs/{id}/sections","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/songs/{id}/sections","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/songs/{id}/sections","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/songs/{id}/sections","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/songs/{id}/sections","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/songs/{id}/sections","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/songs/{id}/sections","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/songs/{id}/sections","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/songs/{id}/sections","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/songs/{id}/sections","traceId":"request-id"}}}}}}},"/v1/songs/{id}/sections/{sid}":{"delete":{"operationId":"deleteSongSection","tags":["SFX & music"],"summary":"delete Song Section","description":"Requires workspace role editor or above. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"sid","in":"path","required":true,"schema":{"type":"string"}},{"name":"X-CSRF-Token","in":"header","required":false,"description":"Required for cookie-authenticated mutations; returned by sign-in/sign-up.","schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"ok":{"type":"boolean"}},"required":["ok"]},"example":{"ok":true}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/songs/{id}/sections/{sid}","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/songs/{id}/sections/{sid}","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/songs/{id}/sections/{sid}","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/songs/{id}/sections/{sid}","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/songs/{id}/sections/{sid}","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/songs/{id}/sections/{sid}","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/songs/{id}/sections/{sid}","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/songs/{id}/sections/{sid}","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/songs/{id}/sections/{sid}","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/songs/{id}/sections/{sid}","traceId":"request-id"}}}}}},"patch":{"operationId":"editSongSection","tags":["SFX & music"],"summary":"edit Song Section","description":"Requires workspace role editor or above. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"sid","in":"path","required":true,"schema":{"type":"string"}},{"name":"X-CSRF-Token","in":"header","required":false,"description":"Required for cookie-authenticated mutations; returned by sign-in/sign-up.","schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"lyrics":{"type":"string","maxLength":10000},"title":{"type":"string","minLength":1,"maxLength":100}},"required":["lyrics"]},"example":{"lyrics":"example","title":"example"}}}},"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","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)$"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"},"data":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}}},"required":["id","createdAt","updatedAt"],"additionalProperties":{}},"example":{"id":"01990000-0000-7000-8000-000000000001","createdAt":"2026-09-19T12:00:00.000Z","updatedAt":"2026-09-19T12:00:00.000Z","data":{}}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/songs/{id}/sections/{sid}","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/songs/{id}/sections/{sid}","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/songs/{id}/sections/{sid}","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/songs/{id}/sections/{sid}","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/songs/{id}/sections/{sid}","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/songs/{id}/sections/{sid}","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/songs/{id}/sections/{sid}","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/songs/{id}/sections/{sid}","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/songs/{id}/sections/{sid}","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/songs/{id}/sections/{sid}","traceId":"request-id"}}}}}}},"/v1/songs/{id}/sections/reorder":{"post":{"operationId":"reorderSongSections","tags":["SFX & music"],"summary":"reorder Song Sections","description":"Requires workspace role editor or above. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"X-CSRF-Token","in":"header","required":false,"description":"Required for cookie-authenticated mutations; returned by sign-in/sign-up.","schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"versionId":{"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)$"},"sectionIds":{"maxItems":500,"type":"array","items":{"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)$"}}},"required":["versionId","sectionIds"]},"example":{"versionId":"01990000-0000-7000-8000-000000000001","sectionIds":["01990000-0000-7000-8000-000000000001"]}}}},"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"ok":{"type":"boolean"}},"required":["ok"]},"example":{"ok":true}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/songs/{id}/sections/reorder","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/songs/{id}/sections/reorder","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/songs/{id}/sections/reorder","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/songs/{id}/sections/reorder","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/songs/{id}/sections/reorder","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/songs/{id}/sections/reorder","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/songs/{id}/sections/reorder","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/songs/{id}/sections/reorder","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/songs/{id}/sections/reorder","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/songs/{id}/sections/reorder","traceId":"request-id"}}}}}}},"/v1/songs/{id}/sections/{sid}/regenerate":{"post":{"operationId":"regenerateSongSection","tags":["SFX & music"],"summary":"regenerate Song Section","description":"Requires workspace role editor or above. Retry with the same Idempotency-Key and identical body. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"sid","in":"path","required":true,"schema":{"type":"string"}},{"name":"Idempotency-Key","in":"header","required":true,"schema":{"type":"string","maxLength":200},"example":"request-2026-001"},{"name":"X-CSRF-Token","in":"header","required":false,"description":"Required for cookie-authenticated mutations; returned by sign-in/sign-up.","schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"prompt":{"type":"string","minLength":1,"maxLength":10000},"productModelId":{"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)$"},"locale":{"default":"ar-SA","type":"string"}},"required":["prompt","productModelId"]},"example":{"prompt":"مرحباً بك في فوكلا.","productModelId":"01990000-0000-7000-8000-000000000001","locale":"ar-SA"}}}},"responses":{"202":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","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)$"},"type":{"type":"string","enum":["tts","voice-change","music","sfx","clean","dub","lyric-edit","voice-design","assistant","dialogue","captions","video"]},"dialogue":{"description":"For dialogue generations: the script with each line's timing in the mixed file","anyOf":[{"type":"object","properties":{"lines":{"type":"array","items":{"type":"object","properties":{"speaker":{"type":"string","minLength":1,"maxLength":40,"description":"Speaker label as written in the script, e.g. Host"},"voiceId":{"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)$"},"text":{"type":"string","minLength":1,"maxLength":2000},"style":{"description":"Delivery hint, e.g. excited, whisper","type":"string","maxLength":40},"pauseAfter":{"description":"Seconds of silence after this line; default = the dialogue gap","type":"number","minimum":0,"maximum":5},"start":{"type":["number","null"]},"end":{"type":["number","null"]}},"required":["speaker","voiceId","text","start","end"]}},"speakers":{"type":"array","items":{"type":"object","properties":{"speaker":{"type":"string"},"voiceId":{"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)$"}},"required":["speaker","voiceId"]}}},"required":["lines","speakers"]},{"type":"null"}]},"clientId":{"anyOf":[{"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)$"},{"type":"null"}]},"approval":{"description":"Latest review of this generation","anyOf":[{"type":"object","properties":{"status":{"type":"string","enum":["pending","approved","changes_requested","cancelled"]},"reviewId":{"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)$"}},"required":["status","reviewId"]},{"type":"null"}]},"status":{"type":"string","enum":["queued","running","succeeded","failed","cancelled"]},"progress":{"type":"number"},"creditsReserved":{"type":"number"},"creditsCharged":{"type":"number"},"assetUrl":{"type":["string","null"]},"peaks":{"type":"array","items":{"type":"number"}},"errorCode":{"type":["string","null"]},"voice":{"anyOf":[{"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)$"},"name":{"type":"object","properties":{"ar":{"type":"string","minLength":1},"en":{"type":"string","minLength":1}},"required":["ar","en"]},"category":{"type":"string"}},"required":["id","name","category"]},{"type":"null"}]},"downloads":{"description":"Signed links per format that download a named file (Content-Disposition attachment); play `assetUrl` / `video.url` instead","type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"string"}},"mediaKind":{"description":"What the output plays as: a video (MP4) or audio","type":"string","enum":["audio","video"]},"video":{"description":"Set when the output is a video: what the player needs","anyOf":[{"type":"object","properties":{"url":{"type":"string","description":"Inline MP4 URL for playback"},"posterUrl":{"description":"Poster / first frame (JPEG) when one was made","type":["string","null"]},"aspectRatio":{"type":"string","enum":["9:16","16:9","1:1"]},"width":{"type":["number","null"]},"height":{"type":["number","null"]},"duration":{"type":["number","null"]},"projectId":{"anyOf":[{"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)$"},{"type":"null"}],"description":"The Vocla Video project it was rendered from"}},"required":["url","posterUrl","aspectRatio","width","height","duration","projectId"]},{"type":"null"}]},"sourceName":{"type":["string","null"]},"songId":{"anyOf":[{"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)$"},{"type":"null"}]},"songVersionId":{"anyOf":[{"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)$"},{"type":"null"}]},"assistantResponse":{"anyOf":[{"type":"object","properties":{"text":{"type":"string"},"transcript":{"type":"string"},"mode":{"type":"string","enum":["text","audio","realtime"]}},"required":["text","transcript","mode"]},{"type":"null"}]},"input":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}},"createdAt":{"type":"string"},"updatedAt":{"type":"string"}},"required":["id","type","status","progress","creditsReserved","creditsCharged","createdAt","updatedAt"],"additionalProperties":{}},"example":{"id":"01990000-0000-7000-8000-000000000001","type":"tts","dialogue":{"lines":[{"speaker":"example","voiceId":"01990000-0000-7000-8000-000000000001","text":"مرحباً بك في فوكلا.","style":"example","pauseAfter":0,"start":"example","end":"example"}],"speakers":[{"speaker":"example","voiceId":"01990000-0000-7000-8000-000000000001"}]},"clientId":"01990000-0000-7000-8000-000000000001","approval":{"status":"pending","reviewId":"01990000-0000-7000-8000-000000000001"},"status":"queued","progress":1,"creditsReserved":1,"creditsCharged":1,"assetUrl":"http://localhost:4000/example","peaks":[1],"errorCode":"example","voice":{"id":"01990000-0000-7000-8000-000000000001","name":{"ar":"مثال","en":"example"},"category":"example"},"downloads":{},"mediaKind":"audio","video":{"url":"example","posterUrl":"http://localhost:4000/example","aspectRatio":"9:16","width":"example","height":"example","duration":"example","projectId":"01990000-0000-7000-8000-000000000001"},"sourceName":"example","songId":"01990000-0000-7000-8000-000000000001","songVersionId":"01990000-0000-7000-8000-000000000001","assistantResponse":{"text":"مرحباً بك في فوكلا.","transcript":"example","mode":"text"},"input":{},"createdAt":"2026-09-19T12:00:00.000Z","updatedAt":"2026-09-19T12:00:00.000Z"}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/songs/{id}/sections/{sid}/regenerate","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/songs/{id}/sections/{sid}/regenerate","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/songs/{id}/sections/{sid}/regenerate","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/songs/{id}/sections/{sid}/regenerate","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/songs/{id}/sections/{sid}/regenerate","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/songs/{id}/sections/{sid}/regenerate","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/songs/{id}/sections/{sid}/regenerate","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/songs/{id}/sections/{sid}/regenerate","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/songs/{id}/sections/{sid}/regenerate","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/songs/{id}/sections/{sid}/regenerate","traceId":"request-id"}}}}}}},"/v1/shares":{"get":{"operationId":"listShares","tags":["SFX & music"],"summary":"list Shares","description":"Requires workspace role viewer or above. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"cursor","in":"query","required":false,"schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"schema":{"default":25,"type":"integer","minimum":1,"maximum":100}},{"name":"q","in":"query","required":false,"schema":{"type":"string","maxLength":200}},{"name":"resourceId","in":"query","required":false,"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)$"}}],"security":[{"session":[]},{"apiKey":[]}],"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"items":{"type":"array","items":{"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)$"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"},"data":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}},"url":{"type":"string"},"resourceId":{"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)$"},"totalViews":{"type":"number"},"uniqueViewers":{"type":"number"},"uniqueViewerWindow":{"type":"string","const":"day"}},"required":["id","createdAt","updatedAt","url","resourceId","totalViews","uniqueViewers","uniqueViewerWindow"],"additionalProperties":{}}},"nextCursor":{"type":["string","null"]}},"required":["items","nextCursor"]},"example":{"items":[{"id":"01990000-0000-7000-8000-000000000001","createdAt":"2026-09-19T12:00:00.000Z","updatedAt":"2026-09-19T12:00:00.000Z","data":{},"url":"example","resourceId":"01990000-0000-7000-8000-000000000001","totalViews":1,"uniqueViewers":1,"uniqueViewerWindow":"day"}],"nextCursor":"example"}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/shares","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/shares","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/shares","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/shares","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/shares","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/shares","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/shares","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/shares","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/shares","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/shares","traceId":"request-id"}}}}}},"post":{"operationId":"createShare","tags":["SFX & music"],"summary":"create Share","description":"Requires workspace role editor or above. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"X-CSRF-Token","in":"header","required":false,"description":"Required for cookie-authenticated mutations; returned by sign-in/sign-up.","schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"songId":{"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)$"},"generationId":{"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)$"},"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))$"},"locale":{"type":"string","enum":["ar","en","fr","fa","zh"]}}},"example":{"songId":"01990000-0000-7000-8000-000000000001","generationId":"01990000-0000-7000-8000-000000000001","expiresAt":"2026-09-19T12:00:00.000Z","locale":"ar"}}}},"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","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)$"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"},"data":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}}},"required":["id","createdAt","updatedAt"],"additionalProperties":{}},"example":{"id":"01990000-0000-7000-8000-000000000001","createdAt":"2026-09-19T12:00:00.000Z","updatedAt":"2026-09-19T12:00:00.000Z","data":{}}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/shares","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/shares","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/shares","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/shares","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/shares","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/shares","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/shares","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/shares","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/shares","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/shares","traceId":"request-id"}}}}}}},"/v1/shares/{id}/analytics":{"get":{"operationId":"shareAnalytics","tags":["SFX & music"],"summary":"share Analytics","description":"Requires workspace role viewer or above. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"days","in":"query","required":false,"schema":{"default":30,"type":"integer","minimum":1,"maximum":90}}],"security":[{"session":[]},{"apiKey":[]}],"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"totalViews":{"type":"number"},"uniqueViewers":{"type":"number"},"uniqueViewerWindow":{"type":"string","const":"day"},"from":{"type":"string"},"to":{"type":"string"},"days":{"type":"array","items":{"type":"object","properties":{"day":{"type":"string"},"views":{"type":"number"},"uniqueViewers":{"type":"number"}},"required":["day","views","uniqueViewers"]}}},"required":["totalViews","uniqueViewers","uniqueViewerWindow","from","to","days"]},"example":{"totalViews":1,"uniqueViewers":1,"uniqueViewerWindow":"day","from":"example","to":"example","days":[{"day":"example","views":1,"uniqueViewers":1}]}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/shares/{id}/analytics","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/shares/{id}/analytics","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/shares/{id}/analytics","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/shares/{id}/analytics","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/shares/{id}/analytics","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/shares/{id}/analytics","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/shares/{id}/analytics","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/shares/{id}/analytics","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/shares/{id}/analytics","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/shares/{id}/analytics","traceId":"request-id"}}}}}}},"/v1/shares/{id}":{"delete":{"operationId":"deleteShare","tags":["SFX & music"],"summary":"delete Share","description":"Requires workspace role editor or above. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"X-CSRF-Token","in":"header","required":false,"description":"Required for cookie-authenticated mutations; returned by sign-in/sign-up.","schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"ok":{"type":"boolean"}},"required":["ok"]},"example":{"ok":true}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/shares/{id}","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/shares/{id}","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/shares/{id}","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/shares/{id}","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/shares/{id}","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/shares/{id}","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/shares/{id}","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/shares/{id}","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/shares/{id}","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/shares/{id}","traceId":"request-id"}}}}}}},"/v1/public/shares/{slug}":{"get":{"operationId":"getPublicShare","tags":["SFX & music"],"summary":"get Public Share","description":"Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"slug","in":"path","required":true,"schema":{"type":"string"}}],"security":[],"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","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)$"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"},"data":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}},"slug":{"type":"string"},"kind":{"type":"string","enum":["song","dub","video","generation"]},"birthday":{"description":"Set when the share is a Birthday Hero video: the child's name, age and the family's message (all shown in the video) and the adventure's look, for the birthday premiere page","anyOf":[{"type":"object","properties":{"name":{"type":"string"},"age":{"type":"integer","minimum":0,"maximum":120},"gender":{"type":"string","enum":["boy","girl"]},"message":{"type":"string"},"themeSlug":{"type":"string"},"themeName":{"type":"object","properties":{"ar":{"type":"string"},"en":{"type":"string"}},"required":["ar","en"]},"colors":{"type":"object","properties":{"from":{"type":"string","pattern":"^#[0-9a-fA-F]{6}$"},"to":{"type":"string","pattern":"^#[0-9a-fA-F]{6}$"},"accent":{"type":"string","pattern":"^#[0-9a-fA-F]{6}$"}},"required":["from","to","accent"]},"emoji":{"type":"string"},"posterUrl":{"description":"The video poster (link previews)","type":["string","null"]}},"required":["name","age","gender","message","themeSlug","themeName","colors","emoji"]},{"type":"null"}]}},"required":["id","createdAt","updatedAt","slug","kind"],"additionalProperties":{}},"example":{"id":"01990000-0000-7000-8000-000000000001","createdAt":"2026-09-19T12:00:00.000Z","updatedAt":"2026-09-19T12:00:00.000Z","data":{},"slug":"example","kind":"song","birthday":{"name":"Noura","age":0,"gender":"boy","message":"example","themeSlug":"example","themeName":{"ar":"مثال","en":"example"},"colors":{"from":"example","to":"example","accent":"example"},"emoji":"example","posterUrl":"http://localhost:4000/example"}}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/public/shares/{slug}","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/public/shares/{slug}","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/public/shares/{slug}","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/public/shares/{slug}","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/public/shares/{slug}","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/public/shares/{slug}","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/public/shares/{slug}","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/public/shares/{slug}","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/public/shares/{slug}","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/public/shares/{slug}","traceId":"request-id"}}}}}}},"/v1/public/shares/{slug}/audio":{"get":{"operationId":"publicShareAudio","tags":["SFX & music"],"summary":"public Share Audio","description":"Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"slug","in":"path","required":true,"schema":{"type":"string"}}],"security":[],"responses":{"302":{"description":"Redirect to the originating app and locale; successful OAuth also sets the session cookie.","headers":{"Location":{"schema":{"type":"string","format":"uri"}},"Set-Cookie":{"schema":{"type":"string"}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/public/shares/{slug}/audio","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/public/shares/{slug}/audio","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/public/shares/{slug}/audio","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/public/shares/{slug}/audio","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/public/shares/{slug}/audio","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/public/shares/{slug}/audio","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/public/shares/{slug}/audio","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/public/shares/{slug}/audio","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/public/shares/{slug}/audio","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/public/shares/{slug}/audio","traceId":"request-id"}}}}}}},"/v1/public/shares/{slug}/video":{"get":{"operationId":"publicShareVideo","tags":["SFX & music"],"summary":"Redirect to a freshly signed MP4 of a shared dub","description":"Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"slug","in":"path","required":true,"schema":{"type":"string"}}],"security":[],"responses":{"302":{"description":"Redirect to the originating app and locale; successful OAuth also sets the session cookie.","headers":{"Location":{"schema":{"type":"string","format":"uri"}},"Set-Cookie":{"schema":{"type":"string"}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/public/shares/{slug}/video","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/public/shares/{slug}/video","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/public/shares/{slug}/video","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/public/shares/{slug}/video","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/public/shares/{slug}/video","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/public/shares/{slug}/video","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/public/shares/{slug}/video","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/public/shares/{slug}/video","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/public/shares/{slug}/video","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/public/shares/{slug}/video","traceId":"request-id"}}}}}}},"/v1/licenses":{"get":{"operationId":"listLicenses","tags":["License certificates"],"summary":"Certificates issued in the workspace, newest first; q searches the code, holder, company, project and title","description":"Requires workspace role viewer or above. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"cursor","in":"query","required":false,"schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"schema":{"default":25,"type":"integer","minimum":1,"maximum":100}},{"name":"q","in":"query","required":false,"schema":{"type":"string","maxLength":200}},{"name":"generationId","in":"query","required":false,"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)$"}}],"security":[{"session":[]},{"apiKey":[]}],"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"items":{"type":"array","items":{"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)$"},"code":{"type":"string","pattern":"^VCL-[2-9A-HJKMNP-Z]{4}-[2-9A-HJKMNP-Z]{4}$","description":"VCL-XXXX-XXXX; the last character is a check character"},"status":{"type":"string","enum":["valid","revoked"]},"verifyUrl":{"type":"string"},"holderName":{"type":"string"},"company":{"type":["string","null"]},"project":{"type":["string","null"]},"generationId":{"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)$"},"title":{"type":"string","description":"The work: its title or the start of its script (delivery tags removed)"},"generationType":{"type":"string"},"kind":{"type":"object","properties":{"ar":{"type":"string"},"en":{"type":"string"}},"required":["ar","en"],"description":"What it is, e.g. Text to speech"},"voice":{"anyOf":[{"type":"object","properties":{"ar":{"type":"string"},"en":{"type":"string"}},"required":["ar","en"]},{"type":"null"}]},"durationSeconds":{"type":["number","null"]},"generatedAt":{"type":"string"},"issuedAt":{"type":"string"},"plan":{"type":"object","properties":{"slug":{"type":"string"},"name":{"type":"object","properties":{"ar":{"type":"string"},"en":{"type":"string"}},"required":["ar","en"]}},"required":["slug","name"]},"fingerprints":{"type":"array","items":{"type":"object","properties":{"format":{"type":"string","description":"mp3, wav, ogg, mp4…: the file as downloaded from Vocla"},"sha256":{"type":"string","pattern":"^[a-f0-9]{64}$"},"size":{"anyOf":[{"type":"integer","minimum":0,"maximum":9007199254740991},{"type":"null"}]}},"required":["format","sha256","size"]}},"issuedBy":{"anyOf":[{"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)$"},"name":{"type":"string"}},"required":["id","name"]},{"type":"null"}]}},"required":["id","code","status","verifyUrl","holderName","company","project","generationId","title","generationType","kind","voice","durationSeconds","generatedAt","issuedAt","plan","fingerprints","issuedBy"]}},"nextCursor":{"type":["string","null"]}},"required":["items","nextCursor"]},"example":{"items":[{"id":"01990000-0000-7000-8000-000000000001","code":"123456","status":"valid","verifyUrl":"http://localhost:4000/example","holderName":"example","company":"example","project":"example","generationId":"01990000-0000-7000-8000-000000000001","title":"example","generationType":"example","kind":{"ar":"مثال","en":"example"},"voice":{"ar":"مثال","en":"example"},"durationSeconds":"example","generatedAt":"2026-09-19T12:00:00.000Z","issuedAt":"2026-09-19T12:00:00.000Z","plan":{"slug":"example","name":{"ar":"مثال","en":"example"}},"fingerprints":[{"format":"example","sha256":"example","size":0}],"issuedBy":{"id":"01990000-0000-7000-8000-000000000001","name":"Noura"}}],"nextCursor":"example"}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/licenses","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/licenses","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/licenses","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/licenses","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/licenses","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/licenses","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/licenses","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/licenses","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/licenses","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/licenses","traceId":"request-id"}}}}}},"post":{"operationId":"issueLicense","tags":["License certificates"],"summary":"Issue a certificate for a finished generation: fingerprints (SHA-256) every downloadable file and snapshots the plan. 403 commercialRights on plans without commercial rights","description":"Requires workspace role editor or above. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"X-CSRF-Token","in":"header","required":false,"description":"Required for cookie-authenticated mutations; returned by sign-in/sign-up.","schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"generationId":{"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)$"},"holderName":{"type":"string","minLength":1,"maxLength":120,"description":"Who holds the license: a person or a business"},"company":{"type":"string","maxLength":120},"project":{"description":"Project or client the audio is for","type":"string","maxLength":120}},"required":["generationId","holderName"]},"example":{"generationId":"01990000-0000-7000-8000-000000000001","holderName":"example","company":"example","project":"example"}}}},"responses":{"201":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","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)$"},"code":{"type":"string","pattern":"^VCL-[2-9A-HJKMNP-Z]{4}-[2-9A-HJKMNP-Z]{4}$","description":"VCL-XXXX-XXXX; the last character is a check character"},"status":{"type":"string","enum":["valid","revoked"]},"verifyUrl":{"type":"string"},"holderName":{"type":"string"},"company":{"type":["string","null"]},"project":{"type":["string","null"]},"generationId":{"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)$"},"title":{"type":"string","description":"The work: its title or the start of its script (delivery tags removed)"},"generationType":{"type":"string"},"kind":{"type":"object","properties":{"ar":{"type":"string"},"en":{"type":"string"}},"required":["ar","en"],"description":"What it is, e.g. Text to speech"},"voice":{"anyOf":[{"type":"object","properties":{"ar":{"type":"string"},"en":{"type":"string"}},"required":["ar","en"]},{"type":"null"}]},"durationSeconds":{"type":["number","null"]},"generatedAt":{"type":"string"},"issuedAt":{"type":"string"},"plan":{"type":"object","properties":{"slug":{"type":"string"},"name":{"type":"object","properties":{"ar":{"type":"string"},"en":{"type":"string"}},"required":["ar","en"]}},"required":["slug","name"]},"fingerprints":{"type":"array","items":{"type":"object","properties":{"format":{"type":"string","description":"mp3, wav, ogg, mp4…: the file as downloaded from Vocla"},"sha256":{"type":"string","pattern":"^[a-f0-9]{64}$"},"size":{"anyOf":[{"type":"integer","minimum":0,"maximum":9007199254740991},{"type":"null"}]}},"required":["format","sha256","size"]}},"issuedBy":{"anyOf":[{"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)$"},"name":{"type":"string"}},"required":["id","name"]},{"type":"null"}]}},"required":["id","code","status","verifyUrl","holderName","company","project","generationId","title","generationType","kind","voice","durationSeconds","generatedAt","issuedAt","plan","fingerprints","issuedBy"]},"example":{"id":"01990000-0000-7000-8000-000000000001","code":"123456","status":"valid","verifyUrl":"http://localhost:4000/example","holderName":"example","company":"example","project":"example","generationId":"01990000-0000-7000-8000-000000000001","title":"example","generationType":"example","kind":{"ar":"مثال","en":"example"},"voice":{"ar":"مثال","en":"example"},"durationSeconds":"example","generatedAt":"2026-09-19T12:00:00.000Z","issuedAt":"2026-09-19T12:00:00.000Z","plan":{"slug":"example","name":{"ar":"مثال","en":"example"}},"fingerprints":[{"format":"example","sha256":"example","size":0}],"issuedBy":{"id":"01990000-0000-7000-8000-000000000001","name":"Noura"}}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/licenses","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/licenses","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/licenses","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/licenses","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/licenses","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/licenses","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/licenses","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/licenses","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/licenses","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/licenses","traceId":"request-id"}}}}}}},"/v1/licenses/draft":{"get":{"operationId":"licenseDraft","tags":["License certificates"],"summary":"What a certificate for this generation would say, whether it can be issued, and suggested holder details","description":"Requires workspace role viewer or above. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"generationId","in":"query","required":true,"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)$"}}],"security":[{"session":[]},{"apiKey":[]}],"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"eligible":{"type":"boolean"},"reason":{"anyOf":[{"type":"string","enum":["plan","type","status"]},{"type":"null"}],"description":"Why it cannot be issued: plan = no commercial rights, type = not a downloadable work, status = not finished"},"title":{"type":"string","description":"The work: its title or the start of its script (delivery tags removed)"},"generationType":{"type":"string"},"kind":{"type":"object","properties":{"ar":{"type":"string"},"en":{"type":"string"}},"required":["ar","en"],"description":"What it is, e.g. Text to speech"},"voice":{"anyOf":[{"type":"object","properties":{"ar":{"type":"string"},"en":{"type":"string"}},"required":["ar","en"]},{"type":"null"}]},"durationSeconds":{"type":["number","null"]},"generatedAt":{"type":"string"},"plan":{"type":"object","properties":{"slug":{"type":"string"},"name":{"type":"object","properties":{"ar":{"type":"string"},"en":{"type":"string"}},"required":["ar","en"]}},"required":["slug","name"]},"suggested":{"type":"object","properties":{"holderName":{"type":"string"},"company":{"type":["string","null"]}},"required":["holderName","company"],"description":"The last holder and company used in this workspace, else the signed-in name"},"issued":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Certificates already issued for this generation"}},"required":["eligible","reason","title","generationType","kind","voice","durationSeconds","generatedAt","plan","suggested","issued"]},"example":{"eligible":true,"reason":"plan","title":"example","generationType":"example","kind":{"ar":"مثال","en":"example"},"voice":{"ar":"مثال","en":"example"},"durationSeconds":"example","generatedAt":"2026-09-19T12:00:00.000Z","plan":{"slug":"example","name":{"ar":"مثال","en":"example"}},"suggested":{"holderName":"example","company":"example"},"issued":-9007199254740991}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/licenses/draft","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/licenses/draft","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/licenses/draft","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/licenses/draft","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/licenses/draft","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/licenses/draft","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/licenses/draft","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/licenses/draft","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/licenses/draft","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/licenses/draft","traceId":"request-id"}}}}}}},"/v1/licenses/{code}/pdf":{"get":{"operationId":"licensePdf","tags":["License certificates"],"summary":"A short-lived download link to the certificate PDF (A4, Arabic and English)","description":"Requires workspace role viewer or above. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"code","in":"path","required":true,"schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"url":{"type":"string"},"filename":{"type":"string"}},"required":["url","filename"]},"example":{"url":"example","filename":"example"}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/licenses/{code}/pdf","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/licenses/{code}/pdf","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/licenses/{code}/pdf","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/licenses/{code}/pdf","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/licenses/{code}/pdf","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/licenses/{code}/pdf","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/licenses/{code}/pdf","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/licenses/{code}/pdf","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/licenses/{code}/pdf","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/licenses/{code}/pdf","traceId":"request-id"}}}}}}},"/v1/public/licenses/{code}":{"get":{"operationId":"getPublicLicense","tags":["License certificates"],"summary":"Verify a license code: holder, work, voice, duration, dates and file fingerprints; never emails or ids. 404 for unknown codes","description":"Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"code","in":"path","required":true,"schema":{"type":"string"}}],"security":[],"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"code":{"type":"string","pattern":"^VCL-[2-9A-HJKMNP-Z]{4}-[2-9A-HJKMNP-Z]{4}$","description":"VCL-XXXX-XXXX; the last character is a check character"},"status":{"type":"string","enum":["valid","revoked"]},"verifyUrl":{"type":"string"},"holderName":{"type":"string"},"company":{"type":["string","null"]},"project":{"type":["string","null"]},"title":{"type":"string","description":"The work: its title or the start of its script (delivery tags removed)"},"generationType":{"type":"string"},"kind":{"type":"object","properties":{"ar":{"type":"string"},"en":{"type":"string"}},"required":["ar","en"],"description":"What it is, e.g. Text to speech"},"voice":{"anyOf":[{"type":"object","properties":{"ar":{"type":"string"},"en":{"type":"string"}},"required":["ar","en"]},{"type":"null"}]},"durationSeconds":{"type":["number","null"]},"generatedAt":{"type":"string"},"issuedAt":{"type":"string"},"plan":{"type":"object","properties":{"ar":{"type":"string"},"en":{"type":"string"}},"required":["ar","en"]},"fingerprints":{"type":"array","items":{"type":"object","properties":{"format":{"type":"string","description":"mp3, wav, ogg, mp4…: the file as downloaded from Vocla"},"sha256":{"type":"string","pattern":"^[a-f0-9]{64}$"},"size":{"anyOf":[{"type":"integer","minimum":0,"maximum":9007199254740991},{"type":"null"}]}},"required":["format","sha256","size"]}}},"required":["code","status","verifyUrl","holderName","company","project","title","generationType","kind","voice","durationSeconds","generatedAt","issuedAt","plan","fingerprints"]},"example":{"code":"123456","status":"valid","verifyUrl":"http://localhost:4000/example","holderName":"example","company":"example","project":"example","title":"example","generationType":"example","kind":{"ar":"مثال","en":"example"},"voice":{"ar":"مثال","en":"example"},"durationSeconds":"example","generatedAt":"2026-09-19T12:00:00.000Z","issuedAt":"2026-09-19T12:00:00.000Z","plan":{"ar":"مثال","en":"example"},"fingerprints":[{"format":"example","sha256":"example","size":0}]}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/public/licenses/{code}","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/public/licenses/{code}","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/public/licenses/{code}","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/public/licenses/{code}","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/public/licenses/{code}","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/public/licenses/{code}","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/public/licenses/{code}","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/public/licenses/{code}","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/public/licenses/{code}","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/public/licenses/{code}","traceId":"request-id"}}}}}}},"/v1/admin/currencies":{"get":{"operationId":"adminListCurrencies","tags":["Admin"],"summary":"admin List Currencies","description":"Requires admin permission currencies.read. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false}],"security":[{"session":[]},{"apiKey":[]}],"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"items":{"type":"array","items":{"type":"object","properties":{"code":{"type":"string","pattern":"^[A-Z]{3}$","description":"ISO 4217 code of a display currency offered in Admin → Currencies"},"kind":{"type":"string","enum":["base","pegged","floating"]},"rate":{"type":"number","exclusiveMinimum":0},"rounding":{"oneOf":[{"type":"object","properties":{"mode":{"type":"string","const":"none"}},"required":["mode"],"additionalProperties":false},{"type":"object","properties":{"mode":{"type":"string","const":"ceil"},"step":{"type":"number","minimum":0.01,"maximum":1000000,"multipleOf":0.01}},"required":["mode","step"],"additionalProperties":false},{"type":"object","properties":{"mode":{"type":"string","const":"auto"}},"required":["mode"],"additionalProperties":false,"description":"Round up to a step that suits the amount (contracts autoRoundingStep)"}]},"enabled":{"type":"boolean"},"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))$"},"updatedBy":{"anyOf":[{"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)$"},{"type":"null"}]},"rateUpdatedAt":{"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))$"},"rateSource":{"type":"string"},"autoRate":{"type":"boolean","description":"The rate refreshes from the daily market feeds"},"offered":{"type":"boolean","description":"Shown to people: enabled, with a rate that is not pending or stale"}},"required":["code","kind","rate","rounding","enabled","updatedAt","updatedBy","rateUpdatedAt","rateSource","autoRate","offered"]}},"nextCursor":{"type":"null"}},"required":["items","nextCursor"]},"example":{"items":[{"code":"123456","kind":"base","rate":1,"rounding":"example","enabled":true,"updatedAt":"2026-09-19T12:00:00.000Z","updatedBy":"01990000-0000-7000-8000-000000000001","rateUpdatedAt":"2026-09-19T12:00:00.000Z","rateSource":"example","autoRate":true,"offered":true}],"nextCursor":null}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/currencies","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/currencies","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/currencies","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/currencies","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/currencies","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/currencies","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/currencies","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/currencies","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/currencies","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/currencies","traceId":"request-id"}}}}}}},"/v1/admin/currencies/{code}":{"patch":{"operationId":"adminUpdateCurrency","tags":["Admin"],"summary":"admin Update Currency","description":"Requires admin permission currencies.write. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"code","in":"path","required":true,"schema":{"type":"string"}},{"name":"X-CSRF-Token","in":"header","required":false,"description":"Required for cookie-authenticated mutations; returned by sign-in/sign-up.","schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"rate":{"type":"number","minimum":1e-8,"maximum":1000000,"multipleOf":1e-8},"rounding":{"oneOf":[{"type":"object","properties":{"mode":{"type":"string","const":"none"}},"required":["mode"],"additionalProperties":false},{"type":"object","properties":{"mode":{"type":"string","const":"ceil"},"step":{"type":"number","minimum":0.01,"maximum":1000000,"multipleOf":0.01}},"required":["mode","step"],"additionalProperties":false},{"type":"object","properties":{"mode":{"type":"string","const":"auto"}},"required":["mode"],"additionalProperties":false,"description":"Round up to a step that suits the amount (contracts autoRoundingStep)"}]},"enabled":{"type":"boolean"},"autoRate":{"description":"Floating currencies: refresh the rate from the daily market feeds. A manual rate switches it off.","type":"boolean"},"reason":{"type":"string","minLength":1,"maxLength":1000},"force":{"description":"Required to change a pegged rate.","type":"boolean"},"confirmLargeChange":{"description":"Required when the rate changes by more than 20 percent.","type":"boolean"}},"required":["reason"],"additionalProperties":false},"example":{"rate":1e-8,"rounding":"example","enabled":true,"autoRate":true,"reason":"example","force":true,"confirmLargeChange":true}}}},"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"code":{"type":"string","pattern":"^[A-Z]{3}$","description":"ISO 4217 code of a display currency offered in Admin → Currencies"},"kind":{"type":"string","enum":["base","pegged","floating"]},"rate":{"type":"number","exclusiveMinimum":0},"rounding":{"oneOf":[{"type":"object","properties":{"mode":{"type":"string","const":"none"}},"required":["mode"],"additionalProperties":false},{"type":"object","properties":{"mode":{"type":"string","const":"ceil"},"step":{"type":"number","minimum":0.01,"maximum":1000000,"multipleOf":0.01}},"required":["mode","step"],"additionalProperties":false},{"type":"object","properties":{"mode":{"type":"string","const":"auto"}},"required":["mode"],"additionalProperties":false,"description":"Round up to a step that suits the amount (contracts autoRoundingStep)"}]},"enabled":{"type":"boolean"},"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))$"},"updatedBy":{"anyOf":[{"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)$"},{"type":"null"}]},"rateUpdatedAt":{"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))$"},"rateSource":{"type":"string"},"autoRate":{"type":"boolean","description":"The rate refreshes from the daily market feeds"},"offered":{"type":"boolean","description":"Shown to people: enabled, with a rate that is not pending or stale"}},"required":["code","kind","rate","rounding","enabled","updatedAt","updatedBy","rateUpdatedAt","rateSource","autoRate","offered"]},"example":{"code":"123456","kind":"base","rate":1,"rounding":"example","enabled":true,"updatedAt":"2026-09-19T12:00:00.000Z","updatedBy":"01990000-0000-7000-8000-000000000001","rateUpdatedAt":"2026-09-19T12:00:00.000Z","rateSource":"example","autoRate":true,"offered":true}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/currencies/{code}","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/currencies/{code}","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/currencies/{code}","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/currencies/{code}","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/currencies/{code}","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/currencies/{code}","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/currencies/{code}","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/currencies/{code}","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/currencies/{code}","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/currencies/{code}","traceId":"request-id"}}}}}}},"/v1/billing/plans":{"get":{"operationId":"listPlans","tags":["Settings: Subscription"],"summary":"Plans on sale in the requester's country: plans hidden there (Admin → Plans → Country availability) are left out, the workspace's own plan is always listed","description":"Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"currency","in":"query","required":false,"schema":{"type":"string","pattern":"^[A-Z]{3}$","description":"ISO 4217 code of a display currency offered in Admin → Currencies"}},{"name":"country","in":"query","required":false,"schema":{"description":"List the plans offered in this ISO country instead of the requester's (signed in: their effective country, else this request's detection); `any` lists every plan with its `availability` rule, for static pages that apply the rules per visitor. Display only: checkout always checks the account's own country","type":"string","pattern":"^([A-Za-z]{2}|any)$"}}],"security":[],"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"items":{"type":"array","items":{"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)$"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"},"data":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}},"displayCurrency":{"type":"string","pattern":"^[A-Z]{3}$","description":"ISO 4217 code of a display currency offered in Admin → Currencies"},"checkoutCurrency":{"type":"string","const":"USD"},"displayPrice":{"type":"object","properties":{"currency":{"type":"string","pattern":"^[A-Z]{3}$","description":"ISO 4217 code of a display currency offered in Admin → Currencies"},"monthly":{"type":"number"},"annual":{"type":"number"},"annualPerMonth":{"type":"number","description":"Rounded annual display price divided by 12, rounded to two decimals."},"enabled":{"type":"boolean"},"rateKind":{"type":"string","enum":["base","pegged","floating"]},"rateUpdatedAt":{"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))$"},"rateSource":{"type":"string"},"approximate":{"type":"boolean"},"source":{"type":"string","enum":["price-point","checkout-price","configured-rate"]}},"required":["currency","monthly","annual","annualPerMonth","enabled","rateKind","rateUpdatedAt","rateSource","approximate","source"]},"displayPrices":{"type":"object","propertyNames":{"type":"string","pattern":"^[A-Z]{3}$","description":"ISO 4217 code of a display currency offered in Admin → Currencies"},"additionalProperties":{"type":"object","properties":{"currency":{"type":"string","pattern":"^[A-Z]{3}$","description":"ISO 4217 code of a display currency offered in Admin → Currencies"},"monthly":{"type":"number"},"annual":{"type":"number"},"annualPerMonth":{"type":"number","description":"Rounded annual display price divided by 12, rounded to two decimals."},"enabled":{"type":"boolean"},"rateKind":{"type":"string","enum":["base","pegged","floating"]},"rateUpdatedAt":{"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))$"},"rateSource":{"type":"string"},"approximate":{"type":"boolean"},"source":{"type":"string","enum":["price-point","checkout-price","configured-rate"]}},"required":["currency","monthly","annual","annualPerMonth","enabled","rateKind","rateUpdatedAt","rateSource","approximate","source"]}},"slug":{"type":"string"},"name":{"type":"object","properties":{"ar":{"type":"string","minLength":1},"en":{"type":"string","minLength":1}},"required":["ar","en"]},"credits":{"type":"number"},"monthlyUsd":{"type":"number"},"annualUsd":{"type":"number"},"entitlements":{"type":"object","properties":{"commercialRights":{"type":"boolean"},"wavExport":{"type":"boolean"},"premiumVoices":{"type":"boolean"},"apiKeys":{"type":"boolean"},"maxProjects":{"type":"number"},"retentionDays":{"type":["number","null"]},"voiceCloning":{"type":"boolean"},"voiceChanger":{"type":"boolean"},"voiceClones":{"type":"number"},"dubbingMaxMinutes":{"type":"number"},"transcriptMaxMinutes":{"type":"number"},"voiceChangerMaxSeconds":{"type":"number"},"seats":{"type":["number","null"]},"dialogue":{"type":"boolean"},"music":{"type":"boolean"},"voiceDesign":{"type":"boolean"},"speechToText":{"type":"boolean"},"dubbing":{"type":"boolean"},"autoTags":{"type":"boolean"},"videoGeneration":{"default":false,"description":"AI video generation (Video studio); refusals are 403 with errors[0].path = the entitlement key","type":"boolean"},"videoSecondsPerMonth":{"default":0,"description":"Video seconds a workspace may render per calendar month (UTC); 0 = none","type":"integer","minimum":0,"maximum":1000000},"videoMaxSecondsPerVideo":{"default":0,"description":"Longest video (seconds of voice-over) a project may have","type":"integer","minimum":0,"maximum":600},"videoMaxResolution":{"default":"720p","description":"Highest output resolution","type":"string","enum":["720p","1080p","4k"]},"videoAspectRatios":{"default":[],"description":"Aspect ratios the plan may render","maxItems":3,"type":"array","items":{"type":"string","enum":["9:16","16:9","1:1"]}},"videoTiers":{"default":[],"description":"Video quality tiers (product model slugs with data.kind = video) the plan may use","maxItems":20,"type":"array","items":{"type":"string","minLength":1,"maxLength":100}},"videoConcurrentRenders":{"default":0,"description":"Scenes rendering at once, and projects rendering at once, per workspace","type":"integer","minimum":0,"maximum":32},"videoStoryboard":{"default":false,"description":"Storyboard stills for approval before rendering","type":"boolean"},"videoImageToVideo":{"default":false,"description":"Upload a product photo as the first frame","type":"boolean"},"videoMusicBed":{"default":false,"description":"Background music bed ducked under the voice","type":"boolean"},"videoWatermark":{"default":true,"description":"Burn a small Vocla watermark into the video","type":"boolean"},"videoProjects":{"default":0,"description":"Active (not deleted) video projects a workspace may keep","type":"integer","minimum":0,"maximum":100000},"videoEdit":{"default":false,"description":"AI video edit studio (remove, add, replace); refusals are 403 with errors[0].path = the entitlement key","type":"boolean"},"videoEditSecondsPerMonth":{"default":0,"description":"Read only: seconds of edits the monthly credits of the plan buy on its cheapest tier (credits ÷ credits per second). Worked out on every read; a saved value is ignored. Not a cap: edits are limited by credits alone, top-ups included","type":"integer","minimum":0,"maximum":100000000},"videoEditMaxSeconds":{"default":0,"description":"Longest clip (seconds) one edit may take (the model itself takes 3 to 15)","type":"integer","minimum":0,"maximum":120},"videoEditTiers":{"default":[],"description":"Edit quality tiers (product model slugs with data.videoEdit) the plan may use","maxItems":20,"type":"array","items":{"type":"string","minLength":1,"maxLength":100}},"videoEditConcurrent":{"default":0,"description":"Edits running at once per workspace","type":"integer","minimum":0,"maximum":32},"videoEditRates":{"default":{},"description":"Credits per second this plan pays on a tier (tier slug → credits); a tier left out costs its own rate. Read back with every tier of the plan filled in","type":"object","propertyNames":{"type":"string","minLength":1,"maxLength":100},"additionalProperties":{"type":"integer","minimum":1,"maximum":1000000}},"languagePack":{"default":false,"description":"The languages pack: speech in the 118 pack languages an admin has switched on (the 13 core languages need no pack). A pack language without it is a 403 with errors[0] = {path: languagePack, code: plan}","type":"boolean"},"imageGeneration":{"default":false,"description":"The image studio (make images from a description); credits are the limit","type":"boolean"},"imageEdit":{"default":false,"description":"Editing photos and using reference photos (any run with a photo); without it the studio only makes images from a description","type":"boolean"},"imageTiers":{"default":[],"description":"Image quality tiers (product model slugs with data.kind = image) the plan may use","maxItems":20,"type":"array","items":{"type":"string","minLength":1,"maxLength":100}},"imageMaxResolution":{"default":"1K","description":"Largest size the plan may ask for","type":"string","enum":["1K","2K","4K"]},"imageMaxReferences":{"default":0,"description":"Reference photos one run may take (an image being edited counts as one)","type":"integer","minimum":0,"maximum":16},"imageTransparent":{"default":false,"description":"Transparent backgrounds (tiers that offer them)","type":"boolean"},"imageBatch":{"default":1,"description":"Images one run may make","type":"integer","minimum":1,"maximum":4},"imageConcurrent":{"default":1,"description":"Runs in progress at once per workspace","type":"integer","minimum":0,"maximum":32},"imageRemoveBackground":{"default":false,"description":"The background removal tool (one photo in, the subject on a clear background)","type":"boolean"},"imageEnhance":{"default":false,"description":"The enhance tool (the same photo sharper at 2K, or 4K within imageMaxResolution)","type":"boolean"},"imageToolCredits":{"default":{},"description":"Credits per image for the tools on this plan; a missing price uses the default (background removal 300, enhance 400 at 2K and 700 at 4K)","type":"object","properties":{"removeBackground":{"type":"integer","minimum":1,"maximum":100000},"enhance2K":{"type":"integer","minimum":1,"maximum":100000},"enhance4K":{"type":"integer","minimum":1,"maximum":100000}}}},"required":["commercialRights","wavExport","premiumVoices","apiKeys","maxProjects","retentionDays"]},"availability":{"type":"object","properties":{"mode":{"type":"string","enum":["all","exclude","include"],"description":"all = on sale everywhere; exclude = hidden in `countries` (unknown countries still see it); include = offered only in `countries` (hidden from unknown countries)"},"countries":{"default":[],"description":"ISO 3166-1 alpha-2 codes","maxItems":250,"type":"array","items":{"type":"string"}}},"required":["mode"],"additionalProperties":false,"description":"Where the plan is on sale (Admin → Plans → Country availability); unknown countries always see it"},"creditOverrides":{"maxItems":250,"type":"array","items":{"type":"object","properties":{"country":{"type":"string","description":"ISO 3166-1 alpha-2 code"},"credits":{"type":"integer","exclusiveMinimum":0,"maximum":1000000000,"description":"Monthly credits in this country instead of the plan's `credits`"}},"required":["country","credits"],"additionalProperties":false},"description":"Monthly credits by country (Admin → Plans → Credits by country; Free plan only): `credits` already applies the requester country, static pages resolve other visitors with planCreditsFor"}},"required":["id","createdAt","updatedAt","displayCurrency","checkoutCurrency","displayPrice","displayPrices","slug","name","credits","monthlyUsd","annualUsd","entitlements","availability","creditOverrides"],"additionalProperties":{}}},"nextCursor":{"type":["string","null"]},"country":{"description":"The country the list was filtered for; null = unknown or country=any (every plan listed)","type":["string","null"]},"displayCurrency":{"type":"string","pattern":"^[A-Z]{3}$","description":"ISO 4217 code of a display currency offered in Admin → Currencies"},"localCurrency":{"type":"string","pattern":"^[A-Z]{3}$","description":"The currency of the requester country when it is offered, else USD (pin it first in a currency picker)"},"currencies":{"type":"array","items":{"type":"string","pattern":"^[A-Z]{3}$","description":"ISO 4217 code of a display currency offered in Admin → Currencies"},"description":"Every currency offered right now (USD first); `displayPrices` only carries USD, SAR, AED, EGP and the requested one, so switching currency is a new request"},"checkoutCurrency":{"type":"string","const":"USD"},"topups":{"type":"array","items":{"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)$"},"slug":{"type":"string"},"kind":{"type":"string","const":"topup"},"name":{"type":"object","properties":{"ar":{"type":"string","minLength":1},"en":{"type":"string","minLength":1}},"required":["ar","en"]},"badge":{"anyOf":[{"type":"object","properties":{"ar":{"type":"string","minLength":1},"en":{"type":"string","minLength":1}},"required":["ar","en"]},{"type":"null"}]},"credits":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"priceUsd":{"type":"number"},"usd":{"type":"number","description":"Same as priceUsd (kept for older clients)"},"sort":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"eligiblePlans":{"type":"array","items":{"type":"string"}},"eligible":{"description":"Signed in: whether the active workspace's plan may buy the pack; null when anonymous","type":["boolean","null"]},"usdPerThousand":{"type":"number"},"creditsPerUsd":{"type":"number"},"bestValue":{"type":"boolean","description":"Lowest price per credit among the listed packs"},"displayCurrency":{"type":"string","pattern":"^[A-Z]{3}$","description":"ISO 4217 code of a display currency offered in Admin → Currencies"},"displayAmount":{"type":"number"},"displayPrice":{"type":"object","properties":{"currency":{"type":"string","pattern":"^[A-Z]{3}$","description":"ISO 4217 code of a display currency offered in Admin → Currencies"},"amount":{"type":"number"},"approximate":{"type":"boolean"},"enabled":{"type":"boolean"},"rateKind":{"type":"string","enum":["base","pegged","floating"]},"rateUpdatedAt":{"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))$"},"rateSource":{"type":"string"}},"required":["currency","amount","approximate","enabled","rateKind","rateUpdatedAt","rateSource"]},"displayPrices":{"type":"object","propertyNames":{"type":"string","pattern":"^[A-Z]{3}$","description":"ISO 4217 code of a display currency offered in Admin → Currencies"},"additionalProperties":{"type":"object","properties":{"currency":{"type":"string","pattern":"^[A-Z]{3}$","description":"ISO 4217 code of a display currency offered in Admin → Currencies"},"amount":{"type":"number"},"approximate":{"type":"boolean"},"enabled":{"type":"boolean"},"rateKind":{"type":"string","enum":["base","pegged","floating"]},"rateUpdatedAt":{"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))$"},"rateSource":{"type":"string"}},"required":["currency","amount","approximate","enabled","rateKind","rateUpdatedAt","rateSource"]}},"checkoutCurrency":{"type":"string","const":"USD"}},"required":["id","slug","kind","name","badge","credits","priceUsd","usd","sort","eligiblePlans","eligible","usdPerThousand","creditsPerUsd","bestValue","displayCurrency","displayAmount","displayPrice","displayPrices","checkoutCurrency"]},"description":"Same as GET /v1/billing/topups items"}},"required":["items","nextCursor","country","displayCurrency","localCurrency","currencies","checkoutCurrency","topups"]},"example":{"items":[{"id":"01990000-0000-7000-8000-000000000001","createdAt":"2026-09-19T12:00:00.000Z","updatedAt":"2026-09-19T12:00:00.000Z","data":{},"displayCurrency":"example","checkoutCurrency":"USD","displayPrice":{"currency":"example","monthly":1,"annual":1,"annualPerMonth":1,"enabled":true,"rateKind":"base","rateUpdatedAt":"2026-09-19T12:00:00.000Z","rateSource":"example","approximate":true,"source":"price-point"},"displayPrices":{},"slug":"example","name":{"ar":"مثال","en":"example"},"credits":1,"monthlyUsd":1,"annualUsd":1,"entitlements":{"commercialRights":true,"wavExport":true,"premiumVoices":true,"apiKeys":true,"maxProjects":1,"retentionDays":"example","voiceCloning":true,"voiceChanger":true,"voiceClones":1,"dubbingMaxMinutes":1,"transcriptMaxMinutes":1,"voiceChangerMaxSeconds":1,"seats":"example","dialogue":true,"music":true,"voiceDesign":true,"speechToText":true,"dubbing":true,"autoTags":true,"videoGeneration":false,"videoSecondsPerMonth":0,"videoMaxSecondsPerVideo":0,"videoMaxResolution":"720p","videoAspectRatios":[],"videoTiers":[],"videoConcurrentRenders":0,"videoStoryboard":false,"videoImageToVideo":false,"videoMusicBed":false,"videoWatermark":true,"videoProjects":0,"videoEdit":false,"videoEditSecondsPerMonth":0,"videoEditMaxSeconds":0,"videoEditTiers":[],"videoEditConcurrent":0,"videoEditRates":{},"languagePack":false,"imageGeneration":false,"imageEdit":false,"imageTiers":[],"imageMaxResolution":"1K","imageMaxReferences":0,"imageTransparent":false,"imageBatch":1,"imageConcurrent":1,"imageRemoveBackground":false,"imageEnhance":false,"imageToolCredits":{}},"availability":{"mode":"all","countries":[]},"creditOverrides":[{"country":"example","credits":1}]}],"nextCursor":"example","country":"example","displayCurrency":"example","localCurrency":"example","currencies":["example"],"checkoutCurrency":"USD","topups":[{"id":"01990000-0000-7000-8000-000000000001","slug":"example","kind":"topup","name":{"ar":"مثال","en":"example"},"badge":{"ar":"مثال","en":"example"},"credits":-9007199254740991,"priceUsd":1,"usd":1,"sort":-9007199254740991,"eligiblePlans":["example"],"eligible":"example","usdPerThousand":1,"creditsPerUsd":1,"bestValue":true,"displayCurrency":"example","displayAmount":1,"displayPrice":{"currency":"example","amount":1,"approximate":true,"enabled":true,"rateKind":"base","rateUpdatedAt":"2026-09-19T12:00:00.000Z","rateSource":"example"},"displayPrices":{},"checkoutCurrency":"USD"}]}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/billing/plans","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/billing/plans","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/billing/plans","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/billing/plans","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/billing/plans","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/billing/plans","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/billing/plans","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/billing/plans","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/billing/plans","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/billing/plans","traceId":"request-id"}}}}}}},"/v1/billing/topups":{"get":{"operationId":"listTopups","tags":["Settings: Subscription"],"summary":"Enabled top-up packs with regional display prices (charged in USD); signed in, each says whether the workspace plan may buy it","description":"Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"currency","in":"query","required":false,"schema":{"type":"string","pattern":"^[A-Z]{3}$","description":"ISO 4217 code of a display currency offered in Admin → Currencies"}}],"security":[],"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"items":{"type":"array","items":{"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)$"},"slug":{"type":"string"},"kind":{"type":"string","const":"topup"},"name":{"type":"object","properties":{"ar":{"type":"string","minLength":1},"en":{"type":"string","minLength":1}},"required":["ar","en"]},"badge":{"anyOf":[{"type":"object","properties":{"ar":{"type":"string","minLength":1},"en":{"type":"string","minLength":1}},"required":["ar","en"]},{"type":"null"}]},"credits":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"priceUsd":{"type":"number"},"usd":{"type":"number","description":"Same as priceUsd (kept for older clients)"},"sort":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"eligiblePlans":{"type":"array","items":{"type":"string"}},"eligible":{"description":"Signed in: whether the active workspace's plan may buy the pack; null when anonymous","type":["boolean","null"]},"usdPerThousand":{"type":"number"},"creditsPerUsd":{"type":"number"},"bestValue":{"type":"boolean","description":"Lowest price per credit among the listed packs"},"displayCurrency":{"type":"string","pattern":"^[A-Z]{3}$","description":"ISO 4217 code of a display currency offered in Admin → Currencies"},"displayAmount":{"type":"number"},"displayPrice":{"type":"object","properties":{"currency":{"type":"string","pattern":"^[A-Z]{3}$","description":"ISO 4217 code of a display currency offered in Admin → Currencies"},"amount":{"type":"number"},"approximate":{"type":"boolean"},"enabled":{"type":"boolean"},"rateKind":{"type":"string","enum":["base","pegged","floating"]},"rateUpdatedAt":{"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))$"},"rateSource":{"type":"string"}},"required":["currency","amount","approximate","enabled","rateKind","rateUpdatedAt","rateSource"]},"displayPrices":{"type":"object","propertyNames":{"type":"string","pattern":"^[A-Z]{3}$","description":"ISO 4217 code of a display currency offered in Admin → Currencies"},"additionalProperties":{"type":"object","properties":{"currency":{"type":"string","pattern":"^[A-Z]{3}$","description":"ISO 4217 code of a display currency offered in Admin → Currencies"},"amount":{"type":"number"},"approximate":{"type":"boolean"},"enabled":{"type":"boolean"},"rateKind":{"type":"string","enum":["base","pegged","floating"]},"rateUpdatedAt":{"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))$"},"rateSource":{"type":"string"}},"required":["currency","amount","approximate","enabled","rateKind","rateUpdatedAt","rateSource"]}},"checkoutCurrency":{"type":"string","const":"USD"}},"required":["id","slug","kind","name","badge","credits","priceUsd","usd","sort","eligiblePlans","eligible","usdPerThousand","creditsPerUsd","bestValue","displayCurrency","displayAmount","displayPrice","displayPrices","checkoutCurrency"]}},"nextCursor":{"type":"null"},"displayCurrency":{"type":"string","pattern":"^[A-Z]{3}$","description":"ISO 4217 code of a display currency offered in Admin → Currencies"},"checkoutCurrency":{"type":"string","const":"USD"},"planSlug":{"description":"Plan of the active workspace when signed in","type":["string","null"]}},"required":["items","nextCursor","displayCurrency","checkoutCurrency","planSlug"]},"example":{"items":[{"id":"01990000-0000-7000-8000-000000000001","slug":"example","kind":"topup","name":{"ar":"مثال","en":"example"},"badge":{"ar":"مثال","en":"example"},"credits":-9007199254740991,"priceUsd":1,"usd":1,"sort":-9007199254740991,"eligiblePlans":["example"],"eligible":"example","usdPerThousand":1,"creditsPerUsd":1,"bestValue":true,"displayCurrency":"example","displayAmount":1,"displayPrice":{"currency":"example","amount":1,"approximate":true,"enabled":true,"rateKind":"base","rateUpdatedAt":"2026-09-19T12:00:00.000Z","rateSource":"example"},"displayPrices":{},"checkoutCurrency":"USD"}],"nextCursor":null,"displayCurrency":"example","checkoutCurrency":"USD","planSlug":"example"}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/billing/topups","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/billing/topups","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/billing/topups","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/billing/topups","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/billing/topups","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/billing/topups","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/billing/topups","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/billing/topups","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/billing/topups","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/billing/topups","traceId":"request-id"}}}}}}},"/v1/billing/checkout":{"post":{"operationId":"createCheckout","tags":["Sign up & onboarding"],"summary":"create Checkout","description":"Requires workspace role owner or above. Retry with the same Idempotency-Key and identical body. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"Idempotency-Key","in":"header","required":true,"schema":{"type":"string","maxLength":200},"example":"request-2026-001"},{"name":"X-CSRF-Token","in":"header","required":false,"description":"Required for cookie-authenticated mutations; returned by sign-in/sign-up.","schema":{"type":"string"}},{"name":"currency","in":"query","required":false,"schema":{"type":"string","pattern":"^[A-Z]{3}$","description":"ISO 4217 code of a display currency offered in Admin → Currencies"}}],"security":[{"session":[]},{"apiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"displayCurrency":{"type":"string","pattern":"^[A-Z]{3}$","description":"ISO 4217 code of a display currency offered in Admin → Currencies"},"planId":{"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)$"},"interval":{"default":"monthly","type":"string","enum":["monthly","annual"]},"coupon":{"type":"string","maxLength":100},"topupId":{"description":"A top-up pack from GET /v1/billing/topups","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)$"},"topup":{"description":"Deprecated: the enabled pack with this many credits; use topupId","type":"string","enum":["20000","50000","100000"]},"returnTo":{"description":"mobile: after paying, the browser returns to the app (vocla://billing/return?checkoutId=…) instead of the web app","type":"string","enum":["web","mobile"]},"source":{"description":"Where the checkout was opened, for funnel analysis: onboarding, upgrade:<reason>, settings, topup, recovery-email…","type":"string","pattern":"^[a-z0-9:._-]{1,60}$"}}},"example":{"displayCurrency":"example","planId":"01990000-0000-7000-8000-000000000001","interval":"monthly","coupon":"example","topupId":"01990000-0000-7000-8000-000000000001","topup":"20000","returnTo":"web","source":"example"}}}},"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"checkoutId":{"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)$"},"sessionId":{"type":"string"},"checkoutUrl":{"type":"string"},"currency":{"type":"string","const":"USD"},"checkoutCurrency":{"type":"string","const":"USD"},"displayCurrency":{"type":"string","pattern":"^[A-Z]{3}$","description":"ISO 4217 code of a display currency offered in Admin → Currencies"}},"required":["checkoutId","sessionId","checkoutUrl","currency","checkoutCurrency","displayCurrency"]},"example":{"checkoutId":"01990000-0000-7000-8000-000000000001","sessionId":"example","checkoutUrl":"http://localhost:4000/example","currency":"USD","checkoutCurrency":"USD","displayCurrency":"example"}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/billing/checkout","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/billing/checkout","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/billing/checkout","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/billing/checkout","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/billing/checkout","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/billing/checkout","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/billing/checkout","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/billing/checkout","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/billing/checkout","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/billing/checkout","traceId":"request-id"}}}}}}},"/v1/billing/quote":{"post":{"operationId":"quoteBilling","tags":["Settings: Subscription"],"summary":"quote Billing","description":"Requires workspace role admin or above. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"X-CSRF-Token","in":"header","required":false,"description":"Required for cookie-authenticated mutations; returned by sign-in/sign-up.","schema":{"type":"string"}},{"name":"currency","in":"query","required":false,"schema":{"type":"string","pattern":"^[A-Z]{3}$","description":"ISO 4217 code of a display currency offered in Admin → Currencies"}}],"security":[{"session":[]},{"apiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"displayCurrency":{"type":"string","pattern":"^[A-Z]{3}$","description":"ISO 4217 code of a display currency offered in Admin → Currencies"},"planId":{"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)$"},"interval":{"default":"monthly","type":"string","enum":["monthly","annual"]},"coupon":{"type":"string","maxLength":100},"topupId":{"description":"A top-up pack from GET /v1/billing/topups","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)$"},"topup":{"description":"Deprecated: the enabled pack with this many credits; use topupId","type":"string","enum":["20000","50000","100000"]},"returnTo":{"description":"mobile: after paying, the browser returns to the app (vocla://billing/return?checkoutId=…) instead of the web app","type":"string","enum":["web","mobile"]},"source":{"description":"Where the checkout was opened, for funnel analysis: onboarding, upgrade:<reason>, settings, topup, recovery-email…","type":"string","pattern":"^[a-z0-9:._-]{1,60}$"}}},"example":{"displayCurrency":"example","planId":"01990000-0000-7000-8000-000000000001","interval":"monthly","coupon":"example","topupId":"01990000-0000-7000-8000-000000000001","topup":"20000","returnTo":"web","source":"example"}}}},"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"currency":{"type":"string","const":"USD"},"checkoutCurrency":{"type":"string","const":"USD"},"displayCurrency":{"type":"string","pattern":"^[A-Z]{3}$","description":"ISO 4217 code of a display currency offered in Admin → Currencies"},"displaySubtotal":{"type":"number"},"displayDiscount":{"type":"number"},"displayTotal":{"type":"number"},"displayApproximate":{"type":"boolean"},"rateKind":{"type":"string","enum":["base","pegged","floating"]},"rateUpdatedAt":{"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))$"},"rateSource":{"type":"string"},"amountUnit":{"type":"string","const":"major"},"subtotal":{"type":"number"},"discount":{"type":"number"},"tax":{"type":"number"},"total":{"type":"number"},"taxStatus":{"type":"string","const":"calculated-at-checkout"},"planId":{"anyOf":[{"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)$"},{"type":"null"}]},"interval":{"type":"string","enum":["monthly","annual"]},"coupon":{"type":["string","null"]},"topup":{"description":"The top-up pack being bought","anyOf":[{"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)$"},"slug":{"type":"string"},"credits":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"name":{"type":"object","properties":{"ar":{"type":"string","minLength":1},"en":{"type":"string","minLength":1}},"required":["ar","en"]}},"required":["id","slug","credits","name"]},{"type":"null"}]}},"required":["currency","checkoutCurrency","displayCurrency","displaySubtotal","displayDiscount","displayTotal","displayApproximate","rateKind","rateUpdatedAt","rateSource","amountUnit","subtotal","discount","tax","total","taxStatus","planId","interval","coupon"]},"example":{"currency":"USD","checkoutCurrency":"USD","displayCurrency":"example","displaySubtotal":1,"displayDiscount":1,"displayTotal":1,"displayApproximate":true,"rateKind":"base","rateUpdatedAt":"2026-09-19T12:00:00.000Z","rateSource":"example","amountUnit":"major","subtotal":1,"discount":1,"tax":1,"total":1,"taxStatus":"calculated-at-checkout","planId":"01990000-0000-7000-8000-000000000001","interval":"monthly","coupon":"example","topup":{"id":"01990000-0000-7000-8000-000000000001","slug":"example","credits":-9007199254740991,"name":{"ar":"مثال","en":"example"}}}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/billing/quote","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/billing/quote","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/billing/quote","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/billing/quote","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/billing/quote","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/billing/quote","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/billing/quote","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/billing/quote","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/billing/quote","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/billing/quote","traceId":"request-id"}}}}}}},"/v1/billing/checkouts/{id}":{"get":{"operationId":"getCheckout","tags":["Settings: Subscription"],"summary":"get Checkout","description":"Requires workspace role owner or above. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","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)$"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"},"data":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}}},"required":["id","createdAt","updatedAt"],"additionalProperties":{}},"example":{"id":"01990000-0000-7000-8000-000000000001","createdAt":"2026-09-19T12:00:00.000Z","updatedAt":"2026-09-19T12:00:00.000Z","data":{}}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/billing/checkouts/{id}","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/billing/checkouts/{id}","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/billing/checkouts/{id}","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/billing/checkouts/{id}","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/billing/checkouts/{id}","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/billing/checkouts/{id}","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/billing/checkouts/{id}","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/billing/checkouts/{id}","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/billing/checkouts/{id}","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/billing/checkouts/{id}","traceId":"request-id"}}}}}}},"/v1/billing/mock/{id}/complete":{"post":{"operationId":"completeMockCheckout","tags":["Sign up & onboarding"],"summary":"complete Mock Checkout","description":"Requires workspace role owner or above. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"X-CSRF-Token","in":"header","required":false,"description":"Required for cookie-authenticated mutations; returned by sign-in/sign-up.","schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"ok":{"type":"boolean"}},"required":["ok"]},"example":{"ok":true}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/billing/mock/{id}/complete","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/billing/mock/{id}/complete","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/billing/mock/{id}/complete","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/billing/mock/{id}/complete","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/billing/mock/{id}/complete","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/billing/mock/{id}/complete","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/billing/mock/{id}/complete","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/billing/mock/{id}/complete","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/billing/mock/{id}/complete","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/billing/mock/{id}/complete","traceId":"request-id"}}}}}}},"/v1/billing/mock/{id}":{"get":{"operationId":"getMockCheckout","tags":["Sign up & onboarding"],"summary":"get Mock Checkout","description":"Requires workspace role owner or above. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","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)$"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"},"data":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}}},"required":["id","createdAt","updatedAt"],"additionalProperties":{}},"example":{"id":"01990000-0000-7000-8000-000000000001","createdAt":"2026-09-19T12:00:00.000Z","updatedAt":"2026-09-19T12:00:00.000Z","data":{}}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/billing/mock/{id}","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/billing/mock/{id}","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/billing/mock/{id}","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/billing/mock/{id}","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/billing/mock/{id}","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/billing/mock/{id}","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/billing/mock/{id}","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/billing/mock/{id}","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/billing/mock/{id}","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/billing/mock/{id}","traceId":"request-id"}}}}}}},"/v1/billing/subscription":{"get":{"operationId":"getSubscription","tags":["Settings: Subscription"],"summary":"get Subscription","description":"Requires workspace role viewer or above. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false}],"security":[{"session":[]},{"apiKey":[]}],"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","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)$"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"},"data":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}},"workspaceId":{"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)$"},"planId":{"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)$"},"providerId":{"type":["string","null"]},"customerId":{"type":["string","null"]},"status":{"type":"string"},"interval":{"type":"string","enum":["monthly","annual"]},"periodStart":{"type":"string"},"periodEnd":{"type":"string"},"credits":{"type":"number"},"planName":{"type":"object","properties":{"ar":{"type":"string","minLength":1},"en":{"type":"string","minLength":1}},"required":["ar","en"]},"entitlements":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}},"audioWatermark":{"type":"boolean","description":"Generated audio of this workspace ends with the spoken \"Made with Vocla\" tag (free plan, owner country in Admin → Audio watermark)"}},"required":["id","createdAt","updatedAt","workspaceId","planId","providerId","customerId","status","interval","periodStart","periodEnd","credits","planName","entitlements","audioWatermark"],"additionalProperties":{}},"example":{"id":"01990000-0000-7000-8000-000000000001","createdAt":"2026-09-19T12:00:00.000Z","updatedAt":"2026-09-19T12:00:00.000Z","data":{},"workspaceId":"01990000-0000-7000-8000-000000000001","planId":"01990000-0000-7000-8000-000000000001","providerId":"example","customerId":"example","status":"example","interval":"monthly","periodStart":"2026-09-19T12:00:00.000Z","periodEnd":"2026-09-19T12:00:00.000Z","credits":1,"planName":{"ar":"مثال","en":"example"},"entitlements":{},"audioWatermark":true}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/billing/subscription","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/billing/subscription","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/billing/subscription","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/billing/subscription","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/billing/subscription","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/billing/subscription","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/billing/subscription","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/billing/subscription","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/billing/subscription","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/billing/subscription","traceId":"request-id"}}}}}}},"/v1/billing/change-plan":{"post":{"operationId":"changePlan","tags":["Settings: Subscription"],"summary":"change Plan","description":"Requires workspace role owner or above. Retry with the same Idempotency-Key and identical body. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"Idempotency-Key","in":"header","required":true,"schema":{"type":"string","maxLength":200},"example":"request-2026-001"},{"name":"X-CSRF-Token","in":"header","required":false,"description":"Required for cookie-authenticated mutations; returned by sign-in/sign-up.","schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"displayCurrency":{"type":"string","pattern":"^[A-Z]{3}$","description":"ISO 4217 code of a display currency offered in Admin → Currencies"},"planId":{"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)$"},"interval":{"default":"monthly","type":"string","enum":["monthly","annual"]},"coupon":{"type":"string","maxLength":100},"topupId":{"description":"A top-up pack from GET /v1/billing/topups","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)$"},"topup":{"description":"Deprecated: the enabled pack with this many credits; use topupId","type":"string","enum":["20000","50000","100000"]},"returnTo":{"description":"mobile: after paying, the browser returns to the app (vocla://billing/return?checkoutId=…) instead of the web app","type":"string","enum":["web","mobile"]},"source":{"description":"Where the checkout was opened, for funnel analysis: onboarding, upgrade:<reason>, settings, topup, recovery-email…","type":"string","pattern":"^[a-z0-9:._-]{1,60}$"}}},"example":{"displayCurrency":"example","planId":"01990000-0000-7000-8000-000000000001","interval":"monthly","coupon":"example","topupId":"01990000-0000-7000-8000-000000000001","topup":"20000","returnTo":"web","source":"example"}}}},"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"ok":{"type":"boolean"}},"required":["ok"]},"example":{"ok":true}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/billing/change-plan","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/billing/change-plan","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/billing/change-plan","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/billing/change-plan","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/billing/change-plan","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/billing/change-plan","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/billing/change-plan","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/billing/change-plan","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/billing/change-plan","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/billing/change-plan","traceId":"request-id"}}}}}}},"/v1/billing/change-plan/preview":{"post":{"operationId":"previewChangePlan","tags":["Settings: Subscription"],"summary":"What switching the subscription to this plan would charge now (prorated, on the saved payment method); nothing is charged","description":"Requires workspace role editor or above. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"X-CSRF-Token","in":"header","required":false,"description":"Required for cookie-authenticated mutations; returned by sign-in/sign-up.","schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"displayCurrency":{"type":"string","pattern":"^[A-Z]{3}$","description":"ISO 4217 code of a display currency offered in Admin → Currencies"},"planId":{"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)$"},"interval":{"default":"monthly","type":"string","enum":["monthly","annual"]},"coupon":{"type":"string","maxLength":100},"topupId":{"description":"A top-up pack from GET /v1/billing/topups","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)$"},"topup":{"description":"Deprecated: the enabled pack with this many credits; use topupId","type":"string","enum":["20000","50000","100000"]},"returnTo":{"description":"mobile: after paying, the browser returns to the app (vocla://billing/return?checkoutId=…) instead of the web app","type":"string","enum":["web","mobile"]},"source":{"description":"Where the checkout was opened, for funnel analysis: onboarding, upgrade:<reason>, settings, topup, recovery-email…","type":"string","pattern":"^[a-z0-9:._-]{1,60}$"}}},"example":{"displayCurrency":"example","planId":"01990000-0000-7000-8000-000000000001","interval":"monthly","coupon":"example","topupId":"01990000-0000-7000-8000-000000000001","topup":"20000","returnTo":"web","source":"example"}}}},"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"amount":{"description":"Charged now for the change, in `currency` (null when the provider could not say)","type":["number","null"]},"currency":{"type":"string"},"effectiveAt":{"type":["string","null"]},"interval":{"type":"string","enum":["monthly","annual"]},"estimated":{"type":"boolean","description":"Estimated from the plans (local mock provider), not quoted by Dodo"}},"required":["amount","currency","effectiveAt","interval","estimated"]},"example":{"amount":"example","currency":"example","effectiveAt":"2026-09-19T12:00:00.000Z","interval":"monthly","estimated":true}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/billing/change-plan/preview","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/billing/change-plan/preview","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/billing/change-plan/preview","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/billing/change-plan/preview","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/billing/change-plan/preview","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/billing/change-plan/preview","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/billing/change-plan/preview","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/billing/change-plan/preview","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/billing/change-plan/preview","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/billing/change-plan/preview","traceId":"request-id"}}}}}}},"/v1/billing/cancel":{"post":{"operationId":"cancelSubscription","tags":["Settings: Subscription"],"summary":"cancel Subscription","description":"Requires workspace role owner or above. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"X-CSRF-Token","in":"header","required":false,"description":"Required for cookie-authenticated mutations; returned by sign-in/sign-up.","schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"reason":{"type":"string","enum":["too-expensive","low-usage","alternative-tool","technical-problems","missing-features","support","privacy","other"]},"comment":{"type":"string","maxLength":2000},"declinedOffer":{"description":"The save offer the cancel flow showed and the person turned down","type":"string","enum":["discount","smaller-plan","support"]}},"required":["reason"]},"example":{"reason":"too-expensive","comment":"example","declinedOffer":"discount"}}}},"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"ok":{"type":"boolean"}},"required":["ok"]},"example":{"ok":true}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/billing/cancel","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/billing/cancel","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/billing/cancel","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/billing/cancel","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/billing/cancel","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/billing/cancel","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/billing/cancel","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/billing/cancel","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/billing/cancel","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/billing/cancel","traceId":"request-id"}}}}}}},"/v1/billing/keep":{"post":{"operationId":"keepSubscription","tags":["Settings: Subscription"],"summary":"Keep the paid plan: undo a scheduled cancellation and, optionally, take the retention offer","description":"Requires workspace role owner or above. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"X-CSRF-Token","in":"header","required":false,"description":"Required for cookie-authenticated mutations; returned by sign-in/sign-up.","schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"offer":{"default":false,"description":"Also take the one-time retention offer (20% off the next renewal), when still available","type":"boolean"},"source":{"default":"settings","type":"string","enum":["settings","cancel-flow","email"]}}},"example":{"offer":false,"source":"settings"}}}},"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"resumed":{"type":"boolean","description":"A scheduled cancellation was undone: the plan renews again"},"offer":{"anyOf":[{"type":"object","properties":{"percent":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"renewsAt":{"type":"string","description":"The renewal it applies to: charged in full, then `percent` refunded"}},"required":["percent","renewsAt"]},{"type":"null"}],"description":"The retention offer granted now (null: not asked for, or already used by this workspace)"}},"required":["resumed","offer"]},"example":{"resumed":true,"offer":{"percent":-9007199254740991,"renewsAt":"2026-09-19T12:00:00.000Z"}}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/billing/keep","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/billing/keep","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/billing/keep","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/billing/keep","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/billing/keep","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/billing/keep","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/billing/keep","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/billing/keep","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/billing/keep","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/billing/keep","traceId":"request-id"}}}}}}},"/v1/billing/payment-method":{"post":{"operationId":"updatePaymentMethod","tags":["Settings: Subscription"],"summary":"A payment page to put a new card on the subscription; on a renewal on hold it also collects the unpaid amount","description":"Requires workspace role owner or above. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"X-CSRF-Token","in":"header","required":false,"description":"Required for cookie-authenticated mutations; returned by sign-in/sign-up.","schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"returnTo":{"default":"web","type":"string","enum":["web","mobile"]}}},"example":{"returnTo":"web"}}}},"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"url":{"type":"string"}},"required":["url"]},"example":{"url":"example"}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/billing/payment-method","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/billing/payment-method","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/billing/payment-method","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/billing/payment-method","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/billing/payment-method","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/billing/payment-method","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/billing/payment-method","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/billing/payment-method","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/billing/payment-method","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/billing/payment-method","traceId":"request-id"}}}}}}},"/v1/billing/invoices":{"get":{"operationId":"listInvoices","tags":["Settings: Subscription"],"summary":"list Invoices","description":"Requires workspace role admin or above. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"cursor","in":"query","required":false,"schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"schema":{"default":25,"type":"integer","minimum":1,"maximum":100}},{"name":"q","in":"query","required":false,"schema":{"type":"string","maxLength":200}}],"security":[{"session":[]},{"apiKey":[]}],"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"items":{"type":"array","items":{"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)$"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"},"data":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}}},"required":["id","createdAt","updatedAt"],"additionalProperties":{}}},"nextCursor":{"type":["string","null"]}},"required":["items","nextCursor"]},"example":{"items":[{"id":"01990000-0000-7000-8000-000000000001","createdAt":"2026-09-19T12:00:00.000Z","updatedAt":"2026-09-19T12:00:00.000Z","data":{}}],"nextCursor":"example"}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/billing/invoices","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/billing/invoices","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/billing/invoices","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/billing/invoices","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/billing/invoices","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/billing/invoices","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/billing/invoices","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/billing/invoices","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/billing/invoices","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/billing/invoices","traceId":"request-id"}}}}}}},"/v1/billing/invoices/{id}/download":{"get":{"operationId":"downloadInvoice","tags":["Settings: Subscription"],"summary":"download Invoice","description":"Requires workspace role admin or above. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"url":{"type":"string"}},"required":["url"]},"example":{"url":"example"}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/billing/invoices/{id}/download","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/billing/invoices/{id}/download","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/billing/invoices/{id}/download","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/billing/invoices/{id}/download","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/billing/invoices/{id}/download","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/billing/invoices/{id}/download","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/billing/invoices/{id}/download","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/billing/invoices/{id}/download","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/billing/invoices/{id}/download","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/billing/invoices/{id}/download","traceId":"request-id"}}}}}}},"/v1/billing/portal":{"post":{"operationId":"createPortal","tags":["Settings: Subscription"],"summary":"create Portal","description":"Requires workspace role owner or above. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"X-CSRF-Token","in":"header","required":false,"description":"Required for cookie-authenticated mutations; returned by sign-in/sign-up.","schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"url":{"type":"string"}},"required":["url"]},"example":{"url":"example"}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/billing/portal","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/billing/portal","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/billing/portal","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/billing/portal","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/billing/portal","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/billing/portal","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/billing/portal","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/billing/portal","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/billing/portal","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/billing/portal","traceId":"request-id"}}}}}}},"/v1/billing/credits":{"get":{"operationId":"getCredits","tags":["Homepage"],"summary":"get Credits","description":"Requires workspace role viewer or above. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false}],"security":[{"session":[]},{"apiKey":[]}],"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"available":{"type":"number"},"reserved":{"type":"number"},"periodAllowance":{"type":"number"},"firstGenerationFree":{"description":"Credits the next generation may cost and still be free (the first generation of the account, up to 500); 0 once used","type":"number"}},"required":["available","reserved","periodAllowance"]},"example":{"available":1,"reserved":1,"periodAllowance":1,"firstGenerationFree":1}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/billing/credits","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/billing/credits","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/billing/credits","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/billing/credits","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/billing/credits","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/billing/credits","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/billing/credits","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/billing/credits","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/billing/credits","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/billing/credits","traceId":"request-id"}}}}}}},"/v1/webhooks/dodo":{"post":{"operationId":"dodoWebhook","tags":["Billing webhooks"],"summary":"dodo Webhook","description":"Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false}],"security":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","propertyNames":{"type":"string"},"additionalProperties":{}},"example":{}}}},"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"ok":{"type":"boolean"}},"required":["ok"]},"example":{"ok":true}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/webhooks/dodo","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/webhooks/dodo","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/webhooks/dodo","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/webhooks/dodo","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/webhooks/dodo","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/webhooks/dodo","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/webhooks/dodo","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/webhooks/dodo","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/webhooks/dodo","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/webhooks/dodo","traceId":"request-id"}}}}}}},"/v1/webhooks/sendgrid":{"post":{"operationId":"sendgridWebhook","tags":["Email"],"summary":"Verify raw-body ECDSA signature and record SendGrid events idempotently","description":"Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"X-Twilio-Email-Event-Webhook-Signature","in":"header","required":true,"schema":{"type":"string"}},{"name":"X-Twilio-Email-Event-Webhook-Timestamp","in":"header","required":true,"schema":{"type":"string"}}],"security":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","maxItems":1000,"type":"array","items":{"type":"object","properties":{"event":{"type":"string","maxLength":40},"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,}$"},"timestamp":{"type":"integer","minimum":0,"maximum":9007199254740991},"sg_event_id":{"type":"string","minLength":1,"maxLength":500}},"required":["event","email","timestamp","sg_event_id"],"additionalProperties":{}}},"example":[{"event":"example","email":"demo@vocla.ai","timestamp":0,"sg_event_id":"example"}]}}},"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"ok":{"type":"boolean"}},"required":["ok"]},"example":{"ok":true}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/webhooks/sendgrid","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/webhooks/sendgrid","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/webhooks/sendgrid","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/webhooks/sendgrid","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/webhooks/sendgrid","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/webhooks/sendgrid","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/webhooks/sendgrid","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/webhooks/sendgrid","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/webhooks/sendgrid","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/webhooks/sendgrid","traceId":"request-id"}}}}}}},"/v1/dev/outbox":{"get":{"operationId":"devOutbox","tags":["Development"],"summary":"Inspect local outbox as super-admin; unavailable outside APP_ENV=local or with SendGrid enabled","description":"Requires admin permission dev.outbox.read. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"to","in":"query","required":false,"schema":{"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,}$"}},{"name":"limit","in":"query","required":false,"schema":{"default":100,"type":"integer","minimum":1,"maximum":100}}],"security":[{"session":[]},{"apiKey":[]}],"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"items":{"type":"array","items":{"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)$"},"notificationId":{"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))$"},"to":{"type":"string"},"from":{"type":"string"},"replyTo":{"type":"string"},"subject":{"type":"string"},"text":{"type":"string"},"html":{"type":"string"},"locale":{"type":"string","enum":["ar","en"]},"template":{"type":"string"}},"required":["id","notificationId","createdAt","to","from","subject","text","html","locale","template"]}},"nextCursor":{"type":"null"}},"required":["items","nextCursor"]},"example":{"items":[{"id":"01990000-0000-7000-8000-000000000001","notificationId":"example","createdAt":"2026-09-19T12:00:00.000Z","to":"example","from":"example","replyTo":"example","subject":"example","text":"مرحباً بك في فوكلا.","html":"example","locale":"ar","template":"example"}],"nextCursor":null}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/dev/outbox","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/dev/outbox","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/dev/outbox","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/dev/outbox","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/dev/outbox","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/dev/outbox","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/dev/outbox","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/dev/outbox","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/dev/outbox","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/dev/outbox","traceId":"request-id"}}}}}}},"/v1/notifications/preferences":{"get":{"operationId":"getNotificationPreferences","tags":["Settings: Notifications"],"summary":"get Notification Preferences","description":"Acts on the signed-in user (no workspace role). Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false}],"security":[{"session":[]},{"apiKey":[]}],"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"marketingUpdates":{"type":"boolean"},"productNews":{"type":"boolean"},"systemAlerts":{"type":"boolean"},"securityNotifications":{"type":"boolean"},"messagesMentions":{"type":"boolean"},"activitySummary":{"type":"boolean"},"taskUpdates":{"type":"boolean"},"followerActivity":{"type":"boolean"},"collaborationInvites":{"type":"boolean"},"aiRecommendations":{"type":"boolean"},"performanceInsights":{"type":"boolean"},"systemLearningUpdates":{"type":"boolean"}},"required":["marketingUpdates","productNews","systemAlerts","securityNotifications","messagesMentions","activitySummary","taskUpdates","followerActivity","collaborationInvites","aiRecommendations","performanceInsights","systemLearningUpdates"]},"example":{"marketingUpdates":true,"productNews":true,"systemAlerts":true,"securityNotifications":true,"messagesMentions":true,"activitySummary":true,"taskUpdates":true,"followerActivity":true,"collaborationInvites":true,"aiRecommendations":true,"performanceInsights":true,"systemLearningUpdates":true}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/notifications/preferences","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/notifications/preferences","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/notifications/preferences","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/notifications/preferences","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/notifications/preferences","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/notifications/preferences","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/notifications/preferences","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/notifications/preferences","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/notifications/preferences","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/notifications/preferences","traceId":"request-id"}}}}}},"put":{"operationId":"setNotificationPreferences","tags":["Settings: Notifications"],"summary":"set Notification Preferences","description":"Acts on the signed-in user (no workspace role). Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"X-CSRF-Token","in":"header","required":false,"description":"Required for cookie-authenticated mutations; returned by sign-in/sign-up.","schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"marketingUpdates":{"type":"boolean"},"productNews":{"type":"boolean"},"systemAlerts":{"type":"boolean"},"securityNotifications":{"type":"boolean"},"messagesMentions":{"type":"boolean"},"activitySummary":{"type":"boolean"},"taskUpdates":{"type":"boolean"},"followerActivity":{"type":"boolean"},"collaborationInvites":{"type":"boolean"},"aiRecommendations":{"type":"boolean"},"performanceInsights":{"type":"boolean"},"systemLearningUpdates":{"type":"boolean"}},"required":["marketingUpdates","productNews","systemAlerts","securityNotifications","messagesMentions","activitySummary","taskUpdates","followerActivity","collaborationInvites","aiRecommendations","performanceInsights","systemLearningUpdates"]},"example":{"marketingUpdates":true,"productNews":true,"systemAlerts":true,"securityNotifications":true,"messagesMentions":true,"activitySummary":true,"taskUpdates":true,"followerActivity":true,"collaborationInvites":true,"aiRecommendations":true,"performanceInsights":true,"systemLearningUpdates":true}}}},"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"marketingUpdates":{"type":"boolean"},"productNews":{"type":"boolean"},"systemAlerts":{"type":"boolean"},"securityNotifications":{"type":"boolean"},"messagesMentions":{"type":"boolean"},"activitySummary":{"type":"boolean"},"taskUpdates":{"type":"boolean"},"followerActivity":{"type":"boolean"},"collaborationInvites":{"type":"boolean"},"aiRecommendations":{"type":"boolean"},"performanceInsights":{"type":"boolean"},"systemLearningUpdates":{"type":"boolean"}},"required":["marketingUpdates","productNews","systemAlerts","securityNotifications","messagesMentions","activitySummary","taskUpdates","followerActivity","collaborationInvites","aiRecommendations","performanceInsights","systemLearningUpdates"]},"example":{"marketingUpdates":true,"productNews":true,"systemAlerts":true,"securityNotifications":true,"messagesMentions":true,"activitySummary":true,"taskUpdates":true,"followerActivity":true,"collaborationInvites":true,"aiRecommendations":true,"performanceInsights":true,"systemLearningUpdates":true}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/notifications/preferences","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/notifications/preferences","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/notifications/preferences","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/notifications/preferences","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/notifications/preferences","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/notifications/preferences","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/notifications/preferences","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/notifications/preferences","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/notifications/preferences","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/notifications/preferences","traceId":"request-id"}}}}}}},"/v1/notifications":{"get":{"operationId":"listNotifications","tags":["Settings: Notifications"],"summary":"list Notifications","description":"Acts on the signed-in user (no workspace role). Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"cursor","in":"query","required":false,"schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"schema":{"default":25,"type":"integer","minimum":1,"maximum":100}},{"name":"q","in":"query","required":false,"schema":{"type":"string","maxLength":200}}],"security":[{"session":[]},{"apiKey":[]}],"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"items":{"type":"array","items":{"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)$"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"},"data":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}}},"required":["id","createdAt","updatedAt"],"additionalProperties":{}}},"nextCursor":{"type":["string","null"]}},"required":["items","nextCursor"]},"example":{"items":[{"id":"01990000-0000-7000-8000-000000000001","createdAt":"2026-09-19T12:00:00.000Z","updatedAt":"2026-09-19T12:00:00.000Z","data":{}}],"nextCursor":"example"}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/notifications","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/notifications","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/notifications","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/notifications","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/notifications","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/notifications","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/notifications","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/notifications","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/notifications","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/notifications","traceId":"request-id"}}}}}}},"/v1/notifications/{id}":{"patch":{"operationId":"readNotification","tags":["Settings: Notifications"],"summary":"read Notification","description":"Acts on the signed-in user (no workspace role). Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"X-CSRF-Token","in":"header","required":false,"description":"Required for cookie-authenticated mutations; returned by sign-in/sign-up.","schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"read":{"type":"boolean"}},"required":["read"]},"example":{"read":true}}}},"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","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)$"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"},"data":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}}},"required":["id","createdAt","updatedAt"],"additionalProperties":{}},"example":{"id":"01990000-0000-7000-8000-000000000001","createdAt":"2026-09-19T12:00:00.000Z","updatedAt":"2026-09-19T12:00:00.000Z","data":{}}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/notifications/{id}","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/notifications/{id}","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/notifications/{id}","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/notifications/{id}","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/notifications/{id}","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/notifications/{id}","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/notifications/{id}","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/notifications/{id}","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/notifications/{id}","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/notifications/{id}","traceId":"request-id"}}}}}}},"/v1/analytics/usage":{"get":{"operationId":"getUsageAnalytics","tags":["Settings: Analytics"],"summary":"get Usage Analytics","description":"Requires workspace role viewer or above. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"from","in":"query","required":false,"schema":{"type":"string","format":"date","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])))$"}},{"name":"to","in":"query","required":false,"schema":{"type":"string","format":"date","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])))$"}}],"security":[{"session":[]},{"apiKey":[]}],"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"from":{"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))$"},"to":{"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))$"},"creditsPerDay":{"type":"array","items":{"type":"object","properties":{"day":{"type":"string","format":"date","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])))$"},"credits":{"type":"integer","minimum":0,"maximum":9007199254740991}},"required":["day","credits"]}},"generatedContent":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["tts","voice-change","music","sfx","clean","dub","lyric-edit","voice-design","assistant","dialogue","captions","video","transcript","auto-tags"]},"count":{"type":"integer","minimum":0,"maximum":9007199254740991},"credits":{"type":"integer","minimum":0,"maximum":9007199254740991},"percentage":{"type":"number","minimum":0,"maximum":100},"vsLastMonth":{"type":["number","null"]},"previousCount":{"type":"integer","minimum":0,"maximum":9007199254740991},"previousCredits":{"type":"integer","minimum":0,"maximum":9007199254740991}},"required":["type","count","credits","percentage","vsLastMonth","previousCount","previousCredits"]}},"featureFrequency":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["tts","voice-change","music","sfx","clean","dub","lyric-edit","voice-design","assistant","dialogue","captions","video","transcript","auto-tags"]},"count":{"type":"integer","minimum":0,"maximum":9007199254740991}},"required":["type","count"]}},"total":{"type":"integer","minimum":0,"maximum":9007199254740991},"totalCredits":{"type":"integer","minimum":0,"maximum":9007199254740991},"previousPeriod":{"type":"object","properties":{"from":{"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))$"},"to":{"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))$"},"total":{"type":"integer","minimum":0,"maximum":9007199254740991},"credits":{"type":"integer","minimum":0,"maximum":9007199254740991}},"required":["from","to","total","credits"]}},"required":["from","to","creditsPerDay","generatedContent","featureFrequency","total","totalCredits","previousPeriod"]},"example":{"from":"2026-09-19T12:00:00.000Z","to":"2026-09-19T12:00:00.000Z","creditsPerDay":[{"day":"2026-09-19","credits":0}],"generatedContent":[{"type":"tts","count":0,"credits":0,"percentage":0,"vsLastMonth":"example","previousCount":0,"previousCredits":0}],"featureFrequency":[{"type":"tts","count":0}],"total":0,"totalCredits":0,"previousPeriod":{"from":"2026-09-19T12:00:00.000Z","to":"2026-09-19T12:00:00.000Z","total":0,"credits":0}}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/analytics/usage","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/analytics/usage","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/analytics/usage","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/analytics/usage","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/analytics/usage","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/analytics/usage","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/analytics/usage","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/analytics/usage","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/analytics/usage","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/analytics/usage","traceId":"request-id"}}}}}}},"/v1/search":{"get":{"operationId":"commandSearch","tags":["Homepage"],"summary":"command Search","description":"Requires workspace role viewer or above. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"cursor","in":"query","required":false,"schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"schema":{"default":25,"type":"integer","minimum":1,"maximum":100}},{"name":"q","in":"query","required":false,"schema":{"type":"string","maxLength":200}}],"security":[{"session":[]},{"apiKey":[]}],"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","propertyNames":{"type":"string"},"additionalProperties":{}},"example":{}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/search","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/search","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/search","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/search","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/search","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/search","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/search","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/search","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/search","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/search","traceId":"request-id"}}}}}}},"/v1/text/surprise":{"post":{"operationId":"surpriseMe","tags":["Homepage"],"summary":"surprise Me","description":"Requires workspace role viewer or above. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"X-CSRF-Token","in":"header","required":false,"description":"Required for cookie-authenticated mutations; returned by sign-in/sign-up.","schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"locale":{"default":"ar-SA","type":"string"},"kind":{"default":"speech","type":"string","enum":["speech","music"]}}},"example":{"locale":"ar-SA","kind":"speech"}}}},"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"text":{"type":"string"}},"required":["text"]},"example":{"text":"مرحباً بك في فوكلا."}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/text/surprise","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/text/surprise","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/text/surprise","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/text/surprise","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/text/surprise","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/text/surprise","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/text/surprise","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/text/surprise","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/text/surprise","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/text/surprise","traceId":"request-id"}}}}}}},"/v1/assistant/sessions":{"post":{"operationId":"createAssistantSession","tags":["Homepage"],"summary":"create Assistant Session","description":"Requires workspace role editor or above. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"X-CSRF-Token","in":"header","required":false,"description":"Required for cookie-authenticated mutations; returned by sign-in/sign-up.","schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"productModelId":{"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)$"},"locale":{"default":"ar-SA","type":"string"},"voiceId":{"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)$"},"mode":{"default":"text","type":"string","enum":["text","audio","realtime"]}},"required":["productModelId"]},"example":{"productModelId":"01990000-0000-7000-8000-000000000001","locale":"ar-SA","voiceId":"01990000-0000-7000-8000-000000000001","mode":"text"}}}},"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","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)$"},"sessionId":{"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)$"},"expiresAt":{"type":"string"},"url":{"type":"string"},"model":{"type":"string"},"productModelId":{"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)$"},"voiceId":{"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)$"},"locale":{"type":"string"},"mode":{"type":"string","enum":["text","audio","realtime"],"description":"text or audio (voice replies); realtime is retired and answered as audio"},"creditsPerTurn":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"transport":{"type":"string","const":"sse"},"turnsUrl":{"type":"string"},"audioUrl":{"type":"string"},"approvalsUrl":{"type":"string"},"tools":{"type":"array","items":{"type":"string","enum":["get_account","list_plans","search_voices","recommend_voices","search_help","list_recent_work","estimate_cost","add_tashkeel","generate_speech","generate_music","open_studio","suggest_upgrade","contact_support"]},"description":"Neo tools frozen for this session (plan + admin setting)"}},"required":["id","sessionId","expiresAt","url","model","productModelId","locale","mode","creditsPerTurn","transport","turnsUrl","audioUrl","approvalsUrl","tools"]},"example":{"id":"01990000-0000-7000-8000-000000000001","sessionId":"01990000-0000-7000-8000-000000000001","expiresAt":"2026-09-19T12:00:00.000Z","url":"example","model":"example","productModelId":"01990000-0000-7000-8000-000000000001","voiceId":"01990000-0000-7000-8000-000000000001","locale":"ar-SA","mode":"text","creditsPerTurn":-9007199254740991,"transport":"sse","turnsUrl":"http://localhost:4000/example","audioUrl":"http://localhost:4000/example","approvalsUrl":"http://localhost:4000/example","tools":["get_account"]}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/assistant/sessions","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/assistant/sessions","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/assistant/sessions","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/assistant/sessions","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/assistant/sessions","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/assistant/sessions","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/assistant/sessions","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/assistant/sessions","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/assistant/sessions","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/assistant/sessions","traceId":"request-id"}}}}}}},"/v1/assistant/sessions/{id}":{"get":{"operationId":"getAssistantSession","tags":["Homepage"],"summary":"get Assistant Session","description":"Requires workspace role viewer or above. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","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)$"},"sessionId":{"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)$"},"expiresAt":{"type":"string"},"url":{"type":"string"},"model":{"type":"string"},"productModelId":{"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)$"},"voiceId":{"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)$"},"locale":{"type":"string"},"mode":{"type":"string","enum":["text","audio","realtime"],"description":"text or audio (voice replies); realtime is retired and answered as audio"},"creditsPerTurn":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"transport":{"type":"string","const":"sse"},"turnsUrl":{"type":"string"},"audioUrl":{"type":"string"},"approvalsUrl":{"type":"string"},"tools":{"type":"array","items":{"type":"string","enum":["get_account","list_plans","search_voices","recommend_voices","search_help","list_recent_work","estimate_cost","add_tashkeel","generate_speech","generate_music","open_studio","suggest_upgrade","contact_support"]},"description":"Neo tools frozen for this session (plan + admin setting)"}},"required":["id","sessionId","expiresAt","url","model","productModelId","locale","mode","creditsPerTurn","transport","turnsUrl","audioUrl","approvalsUrl","tools"]},"example":{"id":"01990000-0000-7000-8000-000000000001","sessionId":"01990000-0000-7000-8000-000000000001","expiresAt":"2026-09-19T12:00:00.000Z","url":"example","model":"example","productModelId":"01990000-0000-7000-8000-000000000001","voiceId":"01990000-0000-7000-8000-000000000001","locale":"ar-SA","mode":"text","creditsPerTurn":-9007199254740991,"transport":"sse","turnsUrl":"http://localhost:4000/example","audioUrl":"http://localhost:4000/example","approvalsUrl":"http://localhost:4000/example","tools":["get_account"]}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/assistant/sessions/{id}","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/assistant/sessions/{id}","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/assistant/sessions/{id}","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/assistant/sessions/{id}","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/assistant/sessions/{id}","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/assistant/sessions/{id}","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/assistant/sessions/{id}","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/assistant/sessions/{id}","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/assistant/sessions/{id}","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/assistant/sessions/{id}","traceId":"request-id"}}}}}},"delete":{"operationId":"deleteAssistantSession","tags":["Homepage"],"summary":"delete Assistant Session","description":"Requires workspace role editor or above. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"X-CSRF-Token","in":"header","required":false,"description":"Required for cookie-authenticated mutations; returned by sign-in/sign-up.","schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"ok":{"type":"boolean"}},"required":["ok"]},"example":{"ok":true}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/assistant/sessions/{id}","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/assistant/sessions/{id}","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/assistant/sessions/{id}","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/assistant/sessions/{id}","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/assistant/sessions/{id}","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/assistant/sessions/{id}","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/assistant/sessions/{id}","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/assistant/sessions/{id}","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/assistant/sessions/{id}","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/assistant/sessions/{id}","traceId":"request-id"}}}}}}},"/v1/assistant/sessions/{id}/turns":{"get":{"operationId":"listAssistantTurns","tags":["Homepage"],"summary":"list Assistant Turns","description":"Requires workspace role viewer or above. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"cursor","in":"query","required":false,"schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"schema":{"default":25,"type":"integer","minimum":1,"maximum":100}},{"name":"q","in":"query","required":false,"schema":{"type":"string","maxLength":200}}],"security":[{"session":[]},{"apiKey":[]}],"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"items":{"type":"array","items":{"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)$"},"type":{"type":"string","enum":["tts","voice-change","music","sfx","clean","dub","lyric-edit","voice-design","assistant","dialogue","captions","video"]},"dialogue":{"description":"For dialogue generations: the script with each line's timing in the mixed file","anyOf":[{"type":"object","properties":{"lines":{"type":"array","items":{"type":"object","properties":{"speaker":{"type":"string","minLength":1,"maxLength":40,"description":"Speaker label as written in the script, e.g. Host"},"voiceId":{"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)$"},"text":{"type":"string","minLength":1,"maxLength":2000},"style":{"description":"Delivery hint, e.g. excited, whisper","type":"string","maxLength":40},"pauseAfter":{"description":"Seconds of silence after this line; default = the dialogue gap","type":"number","minimum":0,"maximum":5},"start":{"type":["number","null"]},"end":{"type":["number","null"]}},"required":["speaker","voiceId","text","start","end"]}},"speakers":{"type":"array","items":{"type":"object","properties":{"speaker":{"type":"string"},"voiceId":{"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)$"}},"required":["speaker","voiceId"]}}},"required":["lines","speakers"]},{"type":"null"}]},"clientId":{"anyOf":[{"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)$"},{"type":"null"}]},"approval":{"description":"Latest review of this generation","anyOf":[{"type":"object","properties":{"status":{"type":"string","enum":["pending","approved","changes_requested","cancelled"]},"reviewId":{"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)$"}},"required":["status","reviewId"]},{"type":"null"}]},"status":{"type":"string","enum":["queued","running","succeeded","failed","cancelled"]},"progress":{"type":"number"},"creditsReserved":{"type":"number"},"creditsCharged":{"type":"number"},"assetUrl":{"type":["string","null"]},"peaks":{"type":"array","items":{"type":"number"}},"errorCode":{"type":["string","null"]},"voice":{"anyOf":[{"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)$"},"name":{"type":"object","properties":{"ar":{"type":"string","minLength":1},"en":{"type":"string","minLength":1}},"required":["ar","en"]},"category":{"type":"string"}},"required":["id","name","category"]},{"type":"null"}]},"downloads":{"description":"Signed links per format that download a named file (Content-Disposition attachment); play `assetUrl` / `video.url` instead","type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"string"}},"mediaKind":{"description":"What the output plays as: a video (MP4) or audio","type":"string","enum":["audio","video"]},"video":{"description":"Set when the output is a video: what the player needs","anyOf":[{"type":"object","properties":{"url":{"type":"string","description":"Inline MP4 URL for playback"},"posterUrl":{"description":"Poster / first frame (JPEG) when one was made","type":["string","null"]},"aspectRatio":{"type":"string","enum":["9:16","16:9","1:1"]},"width":{"type":["number","null"]},"height":{"type":["number","null"]},"duration":{"type":["number","null"]},"projectId":{"anyOf":[{"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)$"},{"type":"null"}],"description":"The Vocla Video project it was rendered from"}},"required":["url","posterUrl","aspectRatio","width","height","duration","projectId"]},{"type":"null"}]},"sourceName":{"type":["string","null"]},"songId":{"anyOf":[{"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)$"},{"type":"null"}]},"songVersionId":{"anyOf":[{"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)$"},{"type":"null"}]},"assistantResponse":{"description":"Neo reply: text, cards, pending approvals, tools used, brain","type":"object","properties":{"text":{"type":"string"},"transcript":{"type":["string","null"]},"mode":{"type":"string","enum":["text","audio"]},"cards":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"kind":{"type":"string","const":"voices"},"title":{"type":["string","null"]},"voices":{"maxItems":12,"type":"array","items":{"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)$"},"name":{"type":"string"},"description":{"type":["string","null"]},"language":{"type":["string","null"]},"dialect":{"type":["string","null"]},"gender":{"type":["string","null"]},"age":{"type":["string","null"]},"tags":{"type":"array","items":{"type":"string"}},"premium":{"type":"boolean"},"locked":{"type":"boolean","description":"Premium voice the person’s plan cannot use"},"sampleUrl":{"type":["string","null"]},"reason":{"description":"Why Neo recommends it","type":["string","null"]}},"required":["id","name","description","language","dialect","gender","age","tags","premium","locked","sampleUrl","reason"]}}},"required":["kind","title","voices"]},{"type":"object","properties":{"kind":{"type":"string","const":"plans"},"currency":{"type":"string"},"current":{"type":["string","null"]},"plans":{"type":"array","items":{"type":"object","properties":{"slug":{"type":"string"},"name":{"type":"string"},"monthly":{"type":"number"},"annualPerMonth":{"type":["number","null"]},"credits":{"type":"number"},"highlights":{"type":"array","items":{"type":"string"}},"checkoutPath":{"type":["string","null"]}},"required":["slug","name","monthly","annualPerMonth","credits","highlights","checkoutPath"]}}},"required":["kind","currency","current","plans"]},{"type":"object","properties":{"kind":{"type":"string","const":"account"},"plan":{"type":"string"},"planName":{"type":"string"},"credits":{"type":"object","properties":{"available":{"type":"number"},"allowance":{"type":["number","null"]}},"required":["available","allowance"]},"watermark":{"type":"boolean"},"premiumVoices":{"type":"boolean"}},"required":["kind","plan","planName","credits","watermark","premiumVoices"]},{"type":"object","properties":{"kind":{"type":"string","const":"generation"},"generationId":{"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)$"},"type":{"type":"string","enum":["tts","music"]},"title":{"type":"string"},"credits":{"type":"number"},"path":{"type":"string","description":"App route of the result"}},"required":["kind","generationId","type","title","credits","path"]},{"type":"object","properties":{"kind":{"type":"string","const":"link"},"label":{"type":"string"},"path":{"type":"string","description":"App route, e.g. /tts?text=…&voice=…"}},"required":["kind","label","path"]},{"type":"object","properties":{"kind":{"type":"string","const":"upgrade"},"reason":{"type":"string"},"plan":{"description":"Suggested plan slug","type":["string","null"]}},"required":["kind","reason","plan"]},{"type":"object","properties":{"kind":{"type":"string","const":"help"},"articles":{"maxItems":5,"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"title":{"type":"string"},"path":{"type":["string","null"]}},"required":["id","title","path"]}}},"required":["kind","articles"]},{"type":"object","properties":{"kind":{"type":"string","const":"text"},"label":{"type":"string"},"text":{"type":"string","maxLength":20000,"description":"E.g. the vowelled script, with a copy button"}},"required":["kind","label","text"]},{"type":"object","properties":{"kind":{"type":"string","const":"ticket"},"ticketId":{"type":"string"},"subject":{"type":"string"}},"required":["kind","ticketId","subject"]}]}},"pendingApprovals":{"type":"array","items":{"type":"object","properties":{"toolUseId":{"type":"string"},"tool":{"type":"string","enum":["get_account","list_plans","search_voices","recommend_voices","search_help","list_recent_work","estimate_cost","add_tashkeel","generate_speech","generate_music","open_studio","suggest_upgrade","contact_support"]},"summary":{"type":"string","description":"Plain-language description of what will happen"},"credits":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"input":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}}},"required":["toolUseId","tool","summary","credits","input"]}},"tools":{"type":"array","items":{"type":"object","properties":{"tool":{"type":"string"},"ok":{"type":"boolean"}},"required":["tool","ok"]}},"brain":{"anyOf":[{"type":"object","properties":{"provider":{"type":"string","enum":["anthropic","openrouter"]},"model":{"type":"string"}},"required":["provider","model"]},{"type":"null"}]}},"required":["text","transcript","mode","cards","pendingApprovals","tools","brain"]},"input":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}},"createdAt":{"type":"string"},"updatedAt":{"type":"string"},"sessionId":{"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)$"},"eventsUrl":{"type":"string"}},"required":["id","type","status","progress","creditsReserved","creditsCharged","createdAt","updatedAt","sessionId","eventsUrl"],"additionalProperties":{}}},"nextCursor":{"type":["string","null"]}},"required":["items","nextCursor"]},"example":{"items":[{"id":"01990000-0000-7000-8000-000000000001","type":"tts","dialogue":{"lines":[{"speaker":"example","voiceId":"01990000-0000-7000-8000-000000000001","text":"مرحباً بك في فوكلا.","style":"example","pauseAfter":0,"start":"example","end":"example"}],"speakers":[{"speaker":"example","voiceId":"01990000-0000-7000-8000-000000000001"}]},"clientId":"01990000-0000-7000-8000-000000000001","approval":{"status":"pending","reviewId":"01990000-0000-7000-8000-000000000001"},"status":"queued","progress":1,"creditsReserved":1,"creditsCharged":1,"assetUrl":"http://localhost:4000/example","peaks":[1],"errorCode":"example","voice":{"id":"01990000-0000-7000-8000-000000000001","name":{"ar":"مثال","en":"example"},"category":"example"},"downloads":{},"mediaKind":"audio","video":{"url":"example","posterUrl":"http://localhost:4000/example","aspectRatio":"9:16","width":"example","height":"example","duration":"example","projectId":"01990000-0000-7000-8000-000000000001"},"sourceName":"example","songId":"01990000-0000-7000-8000-000000000001","songVersionId":"01990000-0000-7000-8000-000000000001","assistantResponse":{"text":"مرحباً بك في فوكلا.","transcript":"example","mode":"text","cards":["example"],"pendingApprovals":[{"toolUseId":"example","tool":"get_account","summary":"example","credits":-9007199254740991,"input":{}}],"tools":[{"tool":"example","ok":true}],"brain":{"provider":"anthropic","model":"example"}},"input":{},"createdAt":"2026-09-19T12:00:00.000Z","updatedAt":"2026-09-19T12:00:00.000Z","sessionId":"01990000-0000-7000-8000-000000000001","eventsUrl":"http://localhost:4000/example"}],"nextCursor":"example"}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/assistant/sessions/{id}/turns","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/assistant/sessions/{id}/turns","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/assistant/sessions/{id}/turns","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/assistant/sessions/{id}/turns","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/assistant/sessions/{id}/turns","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/assistant/sessions/{id}/turns","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/assistant/sessions/{id}/turns","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/assistant/sessions/{id}/turns","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/assistant/sessions/{id}/turns","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/assistant/sessions/{id}/turns","traceId":"request-id"}}}}}},"post":{"operationId":"createAssistantTurn","tags":["Homepage"],"summary":"create Assistant Turn","description":"Requires workspace role editor or above. Retry with the same Idempotency-Key and identical body. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"Idempotency-Key","in":"header","required":true,"schema":{"type":"string","maxLength":200},"example":"request-2026-001"},{"name":"X-CSRF-Token","in":"header","required":false,"description":"Required for cookie-authenticated mutations; returned by sign-in/sign-up.","schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"text":{"type":"string","minLength":1,"maxLength":10000}},"required":["text"]},"example":{"text":"مرحباً بك في فوكلا."}}}},"responses":{"202":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","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)$"},"type":{"type":"string","enum":["tts","voice-change","music","sfx","clean","dub","lyric-edit","voice-design","assistant","dialogue","captions","video"]},"dialogue":{"description":"For dialogue generations: the script with each line's timing in the mixed file","anyOf":[{"type":"object","properties":{"lines":{"type":"array","items":{"type":"object","properties":{"speaker":{"type":"string","minLength":1,"maxLength":40,"description":"Speaker label as written in the script, e.g. Host"},"voiceId":{"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)$"},"text":{"type":"string","minLength":1,"maxLength":2000},"style":{"description":"Delivery hint, e.g. excited, whisper","type":"string","maxLength":40},"pauseAfter":{"description":"Seconds of silence after this line; default = the dialogue gap","type":"number","minimum":0,"maximum":5},"start":{"type":["number","null"]},"end":{"type":["number","null"]}},"required":["speaker","voiceId","text","start","end"]}},"speakers":{"type":"array","items":{"type":"object","properties":{"speaker":{"type":"string"},"voiceId":{"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)$"}},"required":["speaker","voiceId"]}}},"required":["lines","speakers"]},{"type":"null"}]},"clientId":{"anyOf":[{"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)$"},{"type":"null"}]},"approval":{"description":"Latest review of this generation","anyOf":[{"type":"object","properties":{"status":{"type":"string","enum":["pending","approved","changes_requested","cancelled"]},"reviewId":{"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)$"}},"required":["status","reviewId"]},{"type":"null"}]},"status":{"type":"string","enum":["queued","running","succeeded","failed","cancelled"]},"progress":{"type":"number"},"creditsReserved":{"type":"number"},"creditsCharged":{"type":"number"},"assetUrl":{"type":["string","null"]},"peaks":{"type":"array","items":{"type":"number"}},"errorCode":{"type":["string","null"]},"voice":{"anyOf":[{"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)$"},"name":{"type":"object","properties":{"ar":{"type":"string","minLength":1},"en":{"type":"string","minLength":1}},"required":["ar","en"]},"category":{"type":"string"}},"required":["id","name","category"]},{"type":"null"}]},"downloads":{"description":"Signed links per format that download a named file (Content-Disposition attachment); play `assetUrl` / `video.url` instead","type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"string"}},"mediaKind":{"description":"What the output plays as: a video (MP4) or audio","type":"string","enum":["audio","video"]},"video":{"description":"Set when the output is a video: what the player needs","anyOf":[{"type":"object","properties":{"url":{"type":"string","description":"Inline MP4 URL for playback"},"posterUrl":{"description":"Poster / first frame (JPEG) when one was made","type":["string","null"]},"aspectRatio":{"type":"string","enum":["9:16","16:9","1:1"]},"width":{"type":["number","null"]},"height":{"type":["number","null"]},"duration":{"type":["number","null"]},"projectId":{"anyOf":[{"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)$"},{"type":"null"}],"description":"The Vocla Video project it was rendered from"}},"required":["url","posterUrl","aspectRatio","width","height","duration","projectId"]},{"type":"null"}]},"sourceName":{"type":["string","null"]},"songId":{"anyOf":[{"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)$"},{"type":"null"}]},"songVersionId":{"anyOf":[{"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)$"},{"type":"null"}]},"assistantResponse":{"description":"Neo reply: text, cards, pending approvals, tools used, brain","type":"object","properties":{"text":{"type":"string"},"transcript":{"type":["string","null"]},"mode":{"type":"string","enum":["text","audio"]},"cards":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"kind":{"type":"string","const":"voices"},"title":{"type":["string","null"]},"voices":{"maxItems":12,"type":"array","items":{"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)$"},"name":{"type":"string"},"description":{"type":["string","null"]},"language":{"type":["string","null"]},"dialect":{"type":["string","null"]},"gender":{"type":["string","null"]},"age":{"type":["string","null"]},"tags":{"type":"array","items":{"type":"string"}},"premium":{"type":"boolean"},"locked":{"type":"boolean","description":"Premium voice the person’s plan cannot use"},"sampleUrl":{"type":["string","null"]},"reason":{"description":"Why Neo recommends it","type":["string","null"]}},"required":["id","name","description","language","dialect","gender","age","tags","premium","locked","sampleUrl","reason"]}}},"required":["kind","title","voices"]},{"type":"object","properties":{"kind":{"type":"string","const":"plans"},"currency":{"type":"string"},"current":{"type":["string","null"]},"plans":{"type":"array","items":{"type":"object","properties":{"slug":{"type":"string"},"name":{"type":"string"},"monthly":{"type":"number"},"annualPerMonth":{"type":["number","null"]},"credits":{"type":"number"},"highlights":{"type":"array","items":{"type":"string"}},"checkoutPath":{"type":["string","null"]}},"required":["slug","name","monthly","annualPerMonth","credits","highlights","checkoutPath"]}}},"required":["kind","currency","current","plans"]},{"type":"object","properties":{"kind":{"type":"string","const":"account"},"plan":{"type":"string"},"planName":{"type":"string"},"credits":{"type":"object","properties":{"available":{"type":"number"},"allowance":{"type":["number","null"]}},"required":["available","allowance"]},"watermark":{"type":"boolean"},"premiumVoices":{"type":"boolean"}},"required":["kind","plan","planName","credits","watermark","premiumVoices"]},{"type":"object","properties":{"kind":{"type":"string","const":"generation"},"generationId":{"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)$"},"type":{"type":"string","enum":["tts","music"]},"title":{"type":"string"},"credits":{"type":"number"},"path":{"type":"string","description":"App route of the result"}},"required":["kind","generationId","type","title","credits","path"]},{"type":"object","properties":{"kind":{"type":"string","const":"link"},"label":{"type":"string"},"path":{"type":"string","description":"App route, e.g. /tts?text=…&voice=…"}},"required":["kind","label","path"]},{"type":"object","properties":{"kind":{"type":"string","const":"upgrade"},"reason":{"type":"string"},"plan":{"description":"Suggested plan slug","type":["string","null"]}},"required":["kind","reason","plan"]},{"type":"object","properties":{"kind":{"type":"string","const":"help"},"articles":{"maxItems":5,"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"title":{"type":"string"},"path":{"type":["string","null"]}},"required":["id","title","path"]}}},"required":["kind","articles"]},{"type":"object","properties":{"kind":{"type":"string","const":"text"},"label":{"type":"string"},"text":{"type":"string","maxLength":20000,"description":"E.g. the vowelled script, with a copy button"}},"required":["kind","label","text"]},{"type":"object","properties":{"kind":{"type":"string","const":"ticket"},"ticketId":{"type":"string"},"subject":{"type":"string"}},"required":["kind","ticketId","subject"]}]}},"pendingApprovals":{"type":"array","items":{"type":"object","properties":{"toolUseId":{"type":"string"},"tool":{"type":"string","enum":["get_account","list_plans","search_voices","recommend_voices","search_help","list_recent_work","estimate_cost","add_tashkeel","generate_speech","generate_music","open_studio","suggest_upgrade","contact_support"]},"summary":{"type":"string","description":"Plain-language description of what will happen"},"credits":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"input":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}}},"required":["toolUseId","tool","summary","credits","input"]}},"tools":{"type":"array","items":{"type":"object","properties":{"tool":{"type":"string"},"ok":{"type":"boolean"}},"required":["tool","ok"]}},"brain":{"anyOf":[{"type":"object","properties":{"provider":{"type":"string","enum":["anthropic","openrouter"]},"model":{"type":"string"}},"required":["provider","model"]},{"type":"null"}]}},"required":["text","transcript","mode","cards","pendingApprovals","tools","brain"]},"input":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}},"createdAt":{"type":"string"},"updatedAt":{"type":"string"},"sessionId":{"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)$"},"eventsUrl":{"type":"string"}},"required":["id","type","status","progress","creditsReserved","creditsCharged","createdAt","updatedAt","sessionId","eventsUrl"],"additionalProperties":{}},"example":{"id":"01990000-0000-7000-8000-000000000001","type":"tts","dialogue":{"lines":[{"speaker":"example","voiceId":"01990000-0000-7000-8000-000000000001","text":"مرحباً بك في فوكلا.","style":"example","pauseAfter":0,"start":"example","end":"example"}],"speakers":[{"speaker":"example","voiceId":"01990000-0000-7000-8000-000000000001"}]},"clientId":"01990000-0000-7000-8000-000000000001","approval":{"status":"pending","reviewId":"01990000-0000-7000-8000-000000000001"},"status":"queued","progress":1,"creditsReserved":1,"creditsCharged":1,"assetUrl":"http://localhost:4000/example","peaks":[1],"errorCode":"example","voice":{"id":"01990000-0000-7000-8000-000000000001","name":{"ar":"مثال","en":"example"},"category":"example"},"downloads":{},"mediaKind":"audio","video":{"url":"example","posterUrl":"http://localhost:4000/example","aspectRatio":"9:16","width":"example","height":"example","duration":"example","projectId":"01990000-0000-7000-8000-000000000001"},"sourceName":"example","songId":"01990000-0000-7000-8000-000000000001","songVersionId":"01990000-0000-7000-8000-000000000001","assistantResponse":{"text":"مرحباً بك في فوكلا.","transcript":"example","mode":"text","cards":["example"],"pendingApprovals":[{"toolUseId":"example","tool":"get_account","summary":"example","credits":-9007199254740991,"input":{}}],"tools":[{"tool":"example","ok":true}],"brain":{"provider":"anthropic","model":"example"}},"input":{},"createdAt":"2026-09-19T12:00:00.000Z","updatedAt":"2026-09-19T12:00:00.000Z","sessionId":"01990000-0000-7000-8000-000000000001","eventsUrl":"http://localhost:4000/example"}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/assistant/sessions/{id}/turns","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/assistant/sessions/{id}/turns","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/assistant/sessions/{id}/turns","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/assistant/sessions/{id}/turns","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/assistant/sessions/{id}/turns","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/assistant/sessions/{id}/turns","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/assistant/sessions/{id}/turns","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/assistant/sessions/{id}/turns","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/assistant/sessions/{id}/turns","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/assistant/sessions/{id}/turns","traceId":"request-id"}}}}}}},"/v1/assistant/sessions/{id}/audio":{"post":{"operationId":"createAssistantAudioTurn","tags":["Homepage"],"summary":"create Assistant Audio Turn","description":"Requires workspace role editor or above. Retry with the same Idempotency-Key and identical body. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"Idempotency-Key","in":"header","required":true,"schema":{"type":"string","maxLength":200},"example":"request-2026-001"},{"name":"X-CSRF-Token","in":"header","required":false,"description":"Required for cookie-authenticated mutations; returned by sign-in/sign-up.","schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"uploadId":{"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)$"}},"required":["uploadId"]},"example":{"uploadId":"01990000-0000-7000-8000-000000000001"}}}},"responses":{"202":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","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)$"},"type":{"type":"string","enum":["tts","voice-change","music","sfx","clean","dub","lyric-edit","voice-design","assistant","dialogue","captions","video"]},"dialogue":{"description":"For dialogue generations: the script with each line's timing in the mixed file","anyOf":[{"type":"object","properties":{"lines":{"type":"array","items":{"type":"object","properties":{"speaker":{"type":"string","minLength":1,"maxLength":40,"description":"Speaker label as written in the script, e.g. Host"},"voiceId":{"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)$"},"text":{"type":"string","minLength":1,"maxLength":2000},"style":{"description":"Delivery hint, e.g. excited, whisper","type":"string","maxLength":40},"pauseAfter":{"description":"Seconds of silence after this line; default = the dialogue gap","type":"number","minimum":0,"maximum":5},"start":{"type":["number","null"]},"end":{"type":["number","null"]}},"required":["speaker","voiceId","text","start","end"]}},"speakers":{"type":"array","items":{"type":"object","properties":{"speaker":{"type":"string"},"voiceId":{"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)$"}},"required":["speaker","voiceId"]}}},"required":["lines","speakers"]},{"type":"null"}]},"clientId":{"anyOf":[{"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)$"},{"type":"null"}]},"approval":{"description":"Latest review of this generation","anyOf":[{"type":"object","properties":{"status":{"type":"string","enum":["pending","approved","changes_requested","cancelled"]},"reviewId":{"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)$"}},"required":["status","reviewId"]},{"type":"null"}]},"status":{"type":"string","enum":["queued","running","succeeded","failed","cancelled"]},"progress":{"type":"number"},"creditsReserved":{"type":"number"},"creditsCharged":{"type":"number"},"assetUrl":{"type":["string","null"]},"peaks":{"type":"array","items":{"type":"number"}},"errorCode":{"type":["string","null"]},"voice":{"anyOf":[{"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)$"},"name":{"type":"object","properties":{"ar":{"type":"string","minLength":1},"en":{"type":"string","minLength":1}},"required":["ar","en"]},"category":{"type":"string"}},"required":["id","name","category"]},{"type":"null"}]},"downloads":{"description":"Signed links per format that download a named file (Content-Disposition attachment); play `assetUrl` / `video.url` instead","type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"string"}},"mediaKind":{"description":"What the output plays as: a video (MP4) or audio","type":"string","enum":["audio","video"]},"video":{"description":"Set when the output is a video: what the player needs","anyOf":[{"type":"object","properties":{"url":{"type":"string","description":"Inline MP4 URL for playback"},"posterUrl":{"description":"Poster / first frame (JPEG) when one was made","type":["string","null"]},"aspectRatio":{"type":"string","enum":["9:16","16:9","1:1"]},"width":{"type":["number","null"]},"height":{"type":["number","null"]},"duration":{"type":["number","null"]},"projectId":{"anyOf":[{"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)$"},{"type":"null"}],"description":"The Vocla Video project it was rendered from"}},"required":["url","posterUrl","aspectRatio","width","height","duration","projectId"]},{"type":"null"}]},"sourceName":{"type":["string","null"]},"songId":{"anyOf":[{"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)$"},{"type":"null"}]},"songVersionId":{"anyOf":[{"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)$"},{"type":"null"}]},"assistantResponse":{"description":"Neo reply: text, cards, pending approvals, tools used, brain","type":"object","properties":{"text":{"type":"string"},"transcript":{"type":["string","null"]},"mode":{"type":"string","enum":["text","audio"]},"cards":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"kind":{"type":"string","const":"voices"},"title":{"type":["string","null"]},"voices":{"maxItems":12,"type":"array","items":{"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)$"},"name":{"type":"string"},"description":{"type":["string","null"]},"language":{"type":["string","null"]},"dialect":{"type":["string","null"]},"gender":{"type":["string","null"]},"age":{"type":["string","null"]},"tags":{"type":"array","items":{"type":"string"}},"premium":{"type":"boolean"},"locked":{"type":"boolean","description":"Premium voice the person’s plan cannot use"},"sampleUrl":{"type":["string","null"]},"reason":{"description":"Why Neo recommends it","type":["string","null"]}},"required":["id","name","description","language","dialect","gender","age","tags","premium","locked","sampleUrl","reason"]}}},"required":["kind","title","voices"]},{"type":"object","properties":{"kind":{"type":"string","const":"plans"},"currency":{"type":"string"},"current":{"type":["string","null"]},"plans":{"type":"array","items":{"type":"object","properties":{"slug":{"type":"string"},"name":{"type":"string"},"monthly":{"type":"number"},"annualPerMonth":{"type":["number","null"]},"credits":{"type":"number"},"highlights":{"type":"array","items":{"type":"string"}},"checkoutPath":{"type":["string","null"]}},"required":["slug","name","monthly","annualPerMonth","credits","highlights","checkoutPath"]}}},"required":["kind","currency","current","plans"]},{"type":"object","properties":{"kind":{"type":"string","const":"account"},"plan":{"type":"string"},"planName":{"type":"string"},"credits":{"type":"object","properties":{"available":{"type":"number"},"allowance":{"type":["number","null"]}},"required":["available","allowance"]},"watermark":{"type":"boolean"},"premiumVoices":{"type":"boolean"}},"required":["kind","plan","planName","credits","watermark","premiumVoices"]},{"type":"object","properties":{"kind":{"type":"string","const":"generation"},"generationId":{"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)$"},"type":{"type":"string","enum":["tts","music"]},"title":{"type":"string"},"credits":{"type":"number"},"path":{"type":"string","description":"App route of the result"}},"required":["kind","generationId","type","title","credits","path"]},{"type":"object","properties":{"kind":{"type":"string","const":"link"},"label":{"type":"string"},"path":{"type":"string","description":"App route, e.g. /tts?text=…&voice=…"}},"required":["kind","label","path"]},{"type":"object","properties":{"kind":{"type":"string","const":"upgrade"},"reason":{"type":"string"},"plan":{"description":"Suggested plan slug","type":["string","null"]}},"required":["kind","reason","plan"]},{"type":"object","properties":{"kind":{"type":"string","const":"help"},"articles":{"maxItems":5,"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"title":{"type":"string"},"path":{"type":["string","null"]}},"required":["id","title","path"]}}},"required":["kind","articles"]},{"type":"object","properties":{"kind":{"type":"string","const":"text"},"label":{"type":"string"},"text":{"type":"string","maxLength":20000,"description":"E.g. the vowelled script, with a copy button"}},"required":["kind","label","text"]},{"type":"object","properties":{"kind":{"type":"string","const":"ticket"},"ticketId":{"type":"string"},"subject":{"type":"string"}},"required":["kind","ticketId","subject"]}]}},"pendingApprovals":{"type":"array","items":{"type":"object","properties":{"toolUseId":{"type":"string"},"tool":{"type":"string","enum":["get_account","list_plans","search_voices","recommend_voices","search_help","list_recent_work","estimate_cost","add_tashkeel","generate_speech","generate_music","open_studio","suggest_upgrade","contact_support"]},"summary":{"type":"string","description":"Plain-language description of what will happen"},"credits":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"input":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}}},"required":["toolUseId","tool","summary","credits","input"]}},"tools":{"type":"array","items":{"type":"object","properties":{"tool":{"type":"string"},"ok":{"type":"boolean"}},"required":["tool","ok"]}},"brain":{"anyOf":[{"type":"object","properties":{"provider":{"type":"string","enum":["anthropic","openrouter"]},"model":{"type":"string"}},"required":["provider","model"]},{"type":"null"}]}},"required":["text","transcript","mode","cards","pendingApprovals","tools","brain"]},"input":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}},"createdAt":{"type":"string"},"updatedAt":{"type":"string"},"sessionId":{"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)$"},"eventsUrl":{"type":"string"}},"required":["id","type","status","progress","creditsReserved","creditsCharged","createdAt","updatedAt","sessionId","eventsUrl"],"additionalProperties":{}},"example":{"id":"01990000-0000-7000-8000-000000000001","type":"tts","dialogue":{"lines":[{"speaker":"example","voiceId":"01990000-0000-7000-8000-000000000001","text":"مرحباً بك في فوكلا.","style":"example","pauseAfter":0,"start":"example","end":"example"}],"speakers":[{"speaker":"example","voiceId":"01990000-0000-7000-8000-000000000001"}]},"clientId":"01990000-0000-7000-8000-000000000001","approval":{"status":"pending","reviewId":"01990000-0000-7000-8000-000000000001"},"status":"queued","progress":1,"creditsReserved":1,"creditsCharged":1,"assetUrl":"http://localhost:4000/example","peaks":[1],"errorCode":"example","voice":{"id":"01990000-0000-7000-8000-000000000001","name":{"ar":"مثال","en":"example"},"category":"example"},"downloads":{},"mediaKind":"audio","video":{"url":"example","posterUrl":"http://localhost:4000/example","aspectRatio":"9:16","width":"example","height":"example","duration":"example","projectId":"01990000-0000-7000-8000-000000000001"},"sourceName":"example","songId":"01990000-0000-7000-8000-000000000001","songVersionId":"01990000-0000-7000-8000-000000000001","assistantResponse":{"text":"مرحباً بك في فوكلا.","transcript":"example","mode":"text","cards":["example"],"pendingApprovals":[{"toolUseId":"example","tool":"get_account","summary":"example","credits":-9007199254740991,"input":{}}],"tools":[{"tool":"example","ok":true}],"brain":{"provider":"anthropic","model":"example"}},"input":{},"createdAt":"2026-09-19T12:00:00.000Z","updatedAt":"2026-09-19T12:00:00.000Z","sessionId":"01990000-0000-7000-8000-000000000001","eventsUrl":"http://localhost:4000/example"}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/assistant/sessions/{id}/audio","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/assistant/sessions/{id}/audio","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/assistant/sessions/{id}/audio","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/assistant/sessions/{id}/audio","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/assistant/sessions/{id}/audio","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/assistant/sessions/{id}/audio","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/assistant/sessions/{id}/audio","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/assistant/sessions/{id}/audio","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/assistant/sessions/{id}/audio","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/assistant/sessions/{id}/audio","traceId":"request-id"}}}}}}},"/v1/assistant/sessions/{id}/turns/{tid}/events":{"get":{"operationId":"assistantTurnEvents","tags":["Homepage"],"summary":"assistant Turn Events","description":"Requires workspace role viewer or above. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"tid","in":"path","required":true,"schema":{"type":"string"}},{"name":"Last-Event-ID","in":"header","required":false,"schema":{"type":"string","pattern":"^\\d+-\\d+$"},"description":"Resume persisted SSE deltas for up to 24 hours."}],"security":[{"session":[]},{"apiKey":[]}],"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"text/event-stream":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"string"},"example":"example"}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/assistant/sessions/{id}/turns/{tid}/events","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/assistant/sessions/{id}/turns/{tid}/events","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/assistant/sessions/{id}/turns/{tid}/events","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/assistant/sessions/{id}/turns/{tid}/events","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/assistant/sessions/{id}/turns/{tid}/events","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/assistant/sessions/{id}/turns/{tid}/events","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/assistant/sessions/{id}/turns/{tid}/events","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/assistant/sessions/{id}/turns/{tid}/events","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/assistant/sessions/{id}/turns/{tid}/events","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/assistant/sessions/{id}/turns/{tid}/events","traceId":"request-id"}}}}}}},"/v1/assistant/sessions/{id}/approvals":{"post":{"operationId":"answerAssistantApproval","tags":["Homepage"],"summary":"Approve or decline a pending Neo action (approval.required); continues the conversation as a new turn","description":"Requires workspace role editor or above. Retry with the same Idempotency-Key and identical body. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"Idempotency-Key","in":"header","required":true,"schema":{"type":"string","maxLength":200},"example":"request-2026-001"},{"name":"X-CSRF-Token","in":"header","required":false,"description":"Required for cookie-authenticated mutations; returned by sign-in/sign-up.","schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"toolUseId":{"type":"string","minLength":1,"maxLength":200},"approve":{"type":"boolean"}},"required":["toolUseId","approve"]},"example":{"toolUseId":"example","approve":true}}}},"responses":{"202":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","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)$"},"type":{"type":"string","enum":["tts","voice-change","music","sfx","clean","dub","lyric-edit","voice-design","assistant","dialogue","captions","video"]},"dialogue":{"description":"For dialogue generations: the script with each line's timing in the mixed file","anyOf":[{"type":"object","properties":{"lines":{"type":"array","items":{"type":"object","properties":{"speaker":{"type":"string","minLength":1,"maxLength":40,"description":"Speaker label as written in the script, e.g. Host"},"voiceId":{"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)$"},"text":{"type":"string","minLength":1,"maxLength":2000},"style":{"description":"Delivery hint, e.g. excited, whisper","type":"string","maxLength":40},"pauseAfter":{"description":"Seconds of silence after this line; default = the dialogue gap","type":"number","minimum":0,"maximum":5},"start":{"type":["number","null"]},"end":{"type":["number","null"]}},"required":["speaker","voiceId","text","start","end"]}},"speakers":{"type":"array","items":{"type":"object","properties":{"speaker":{"type":"string"},"voiceId":{"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)$"}},"required":["speaker","voiceId"]}}},"required":["lines","speakers"]},{"type":"null"}]},"clientId":{"anyOf":[{"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)$"},{"type":"null"}]},"approval":{"description":"Latest review of this generation","anyOf":[{"type":"object","properties":{"status":{"type":"string","enum":["pending","approved","changes_requested","cancelled"]},"reviewId":{"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)$"}},"required":["status","reviewId"]},{"type":"null"}]},"status":{"type":"string","enum":["queued","running","succeeded","failed","cancelled"]},"progress":{"type":"number"},"creditsReserved":{"type":"number"},"creditsCharged":{"type":"number"},"assetUrl":{"type":["string","null"]},"peaks":{"type":"array","items":{"type":"number"}},"errorCode":{"type":["string","null"]},"voice":{"anyOf":[{"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)$"},"name":{"type":"object","properties":{"ar":{"type":"string","minLength":1},"en":{"type":"string","minLength":1}},"required":["ar","en"]},"category":{"type":"string"}},"required":["id","name","category"]},{"type":"null"}]},"downloads":{"description":"Signed links per format that download a named file (Content-Disposition attachment); play `assetUrl` / `video.url` instead","type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"string"}},"mediaKind":{"description":"What the output plays as: a video (MP4) or audio","type":"string","enum":["audio","video"]},"video":{"description":"Set when the output is a video: what the player needs","anyOf":[{"type":"object","properties":{"url":{"type":"string","description":"Inline MP4 URL for playback"},"posterUrl":{"description":"Poster / first frame (JPEG) when one was made","type":["string","null"]},"aspectRatio":{"type":"string","enum":["9:16","16:9","1:1"]},"width":{"type":["number","null"]},"height":{"type":["number","null"]},"duration":{"type":["number","null"]},"projectId":{"anyOf":[{"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)$"},{"type":"null"}],"description":"The Vocla Video project it was rendered from"}},"required":["url","posterUrl","aspectRatio","width","height","duration","projectId"]},{"type":"null"}]},"sourceName":{"type":["string","null"]},"songId":{"anyOf":[{"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)$"},{"type":"null"}]},"songVersionId":{"anyOf":[{"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)$"},{"type":"null"}]},"assistantResponse":{"description":"Neo reply: text, cards, pending approvals, tools used, brain","type":"object","properties":{"text":{"type":"string"},"transcript":{"type":["string","null"]},"mode":{"type":"string","enum":["text","audio"]},"cards":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"kind":{"type":"string","const":"voices"},"title":{"type":["string","null"]},"voices":{"maxItems":12,"type":"array","items":{"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)$"},"name":{"type":"string"},"description":{"type":["string","null"]},"language":{"type":["string","null"]},"dialect":{"type":["string","null"]},"gender":{"type":["string","null"]},"age":{"type":["string","null"]},"tags":{"type":"array","items":{"type":"string"}},"premium":{"type":"boolean"},"locked":{"type":"boolean","description":"Premium voice the person’s plan cannot use"},"sampleUrl":{"type":["string","null"]},"reason":{"description":"Why Neo recommends it","type":["string","null"]}},"required":["id","name","description","language","dialect","gender","age","tags","premium","locked","sampleUrl","reason"]}}},"required":["kind","title","voices"]},{"type":"object","properties":{"kind":{"type":"string","const":"plans"},"currency":{"type":"string"},"current":{"type":["string","null"]},"plans":{"type":"array","items":{"type":"object","properties":{"slug":{"type":"string"},"name":{"type":"string"},"monthly":{"type":"number"},"annualPerMonth":{"type":["number","null"]},"credits":{"type":"number"},"highlights":{"type":"array","items":{"type":"string"}},"checkoutPath":{"type":["string","null"]}},"required":["slug","name","monthly","annualPerMonth","credits","highlights","checkoutPath"]}}},"required":["kind","currency","current","plans"]},{"type":"object","properties":{"kind":{"type":"string","const":"account"},"plan":{"type":"string"},"planName":{"type":"string"},"credits":{"type":"object","properties":{"available":{"type":"number"},"allowance":{"type":["number","null"]}},"required":["available","allowance"]},"watermark":{"type":"boolean"},"premiumVoices":{"type":"boolean"}},"required":["kind","plan","planName","credits","watermark","premiumVoices"]},{"type":"object","properties":{"kind":{"type":"string","const":"generation"},"generationId":{"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)$"},"type":{"type":"string","enum":["tts","music"]},"title":{"type":"string"},"credits":{"type":"number"},"path":{"type":"string","description":"App route of the result"}},"required":["kind","generationId","type","title","credits","path"]},{"type":"object","properties":{"kind":{"type":"string","const":"link"},"label":{"type":"string"},"path":{"type":"string","description":"App route, e.g. /tts?text=…&voice=…"}},"required":["kind","label","path"]},{"type":"object","properties":{"kind":{"type":"string","const":"upgrade"},"reason":{"type":"string"},"plan":{"description":"Suggested plan slug","type":["string","null"]}},"required":["kind","reason","plan"]},{"type":"object","properties":{"kind":{"type":"string","const":"help"},"articles":{"maxItems":5,"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"title":{"type":"string"},"path":{"type":["string","null"]}},"required":["id","title","path"]}}},"required":["kind","articles"]},{"type":"object","properties":{"kind":{"type":"string","const":"text"},"label":{"type":"string"},"text":{"type":"string","maxLength":20000,"description":"E.g. the vowelled script, with a copy button"}},"required":["kind","label","text"]},{"type":"object","properties":{"kind":{"type":"string","const":"ticket"},"ticketId":{"type":"string"},"subject":{"type":"string"}},"required":["kind","ticketId","subject"]}]}},"pendingApprovals":{"type":"array","items":{"type":"object","properties":{"toolUseId":{"type":"string"},"tool":{"type":"string","enum":["get_account","list_plans","search_voices","recommend_voices","search_help","list_recent_work","estimate_cost","add_tashkeel","generate_speech","generate_music","open_studio","suggest_upgrade","contact_support"]},"summary":{"type":"string","description":"Plain-language description of what will happen"},"credits":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"input":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}}},"required":["toolUseId","tool","summary","credits","input"]}},"tools":{"type":"array","items":{"type":"object","properties":{"tool":{"type":"string"},"ok":{"type":"boolean"}},"required":["tool","ok"]}},"brain":{"anyOf":[{"type":"object","properties":{"provider":{"type":"string","enum":["anthropic","openrouter"]},"model":{"type":"string"}},"required":["provider","model"]},{"type":"null"}]}},"required":["text","transcript","mode","cards","pendingApprovals","tools","brain"]},"input":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}},"createdAt":{"type":"string"},"updatedAt":{"type":"string"},"sessionId":{"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)$"},"eventsUrl":{"type":"string"}},"required":["id","type","status","progress","creditsReserved","creditsCharged","createdAt","updatedAt","sessionId","eventsUrl"],"additionalProperties":{}},"example":{"id":"01990000-0000-7000-8000-000000000001","type":"tts","dialogue":{"lines":[{"speaker":"example","voiceId":"01990000-0000-7000-8000-000000000001","text":"مرحباً بك في فوكلا.","style":"example","pauseAfter":0,"start":"example","end":"example"}],"speakers":[{"speaker":"example","voiceId":"01990000-0000-7000-8000-000000000001"}]},"clientId":"01990000-0000-7000-8000-000000000001","approval":{"status":"pending","reviewId":"01990000-0000-7000-8000-000000000001"},"status":"queued","progress":1,"creditsReserved":1,"creditsCharged":1,"assetUrl":"http://localhost:4000/example","peaks":[1],"errorCode":"example","voice":{"id":"01990000-0000-7000-8000-000000000001","name":{"ar":"مثال","en":"example"},"category":"example"},"downloads":{},"mediaKind":"audio","video":{"url":"example","posterUrl":"http://localhost:4000/example","aspectRatio":"9:16","width":"example","height":"example","duration":"example","projectId":"01990000-0000-7000-8000-000000000001"},"sourceName":"example","songId":"01990000-0000-7000-8000-000000000001","songVersionId":"01990000-0000-7000-8000-000000000001","assistantResponse":{"text":"مرحباً بك في فوكلا.","transcript":"example","mode":"text","cards":["example"],"pendingApprovals":[{"toolUseId":"example","tool":"get_account","summary":"example","credits":-9007199254740991,"input":{}}],"tools":[{"tool":"example","ok":true}],"brain":{"provider":"anthropic","model":"example"}},"input":{},"createdAt":"2026-09-19T12:00:00.000Z","updatedAt":"2026-09-19T12:00:00.000Z","sessionId":"01990000-0000-7000-8000-000000000001","eventsUrl":"http://localhost:4000/example"}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/assistant/sessions/{id}/approvals","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/assistant/sessions/{id}/approvals","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/assistant/sessions/{id}/approvals","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/assistant/sessions/{id}/approvals","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/assistant/sessions/{id}/approvals","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/assistant/sessions/{id}/approvals","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/assistant/sessions/{id}/approvals","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/assistant/sessions/{id}/approvals","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/assistant/sessions/{id}/approvals","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/assistant/sessions/{id}/approvals","traceId":"request-id"}}}}}}},"/v1/workspaces":{"get":{"operationId":"listWorkspaces","tags":["Workspaces"],"summary":"list Workspaces","description":"Acts on the signed-in user (no workspace role). Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false}],"security":[{"session":[]},{"apiKey":[]}],"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"items":{"type":"array","items":{"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)$"},"name":{"type":"string"},"logoUrl":{"type":["string","null"]},"role":{"type":"string","enum":["owner","admin","editor","viewer"]},"plan":{"type":"object","properties":{"slug":{"type":"string"},"name":{"type":"object","properties":{"ar":{"type":"string","minLength":1},"en":{"type":"string","minLength":1}},"required":["ar","en"]}},"required":["slug","name"]},"members":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}},"required":["id","name","logoUrl","role","plan","members"]}},"nextCursor":{"type":["string","null"]}},"required":["items","nextCursor"]},"example":{"items":[{"id":"01990000-0000-7000-8000-000000000001","name":"Noura","logoUrl":"http://localhost:4000/example","role":"owner","plan":{"slug":"example","name":{"ar":"مثال","en":"example"}},"members":-9007199254740991}],"nextCursor":"example"}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/workspaces","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/workspaces","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/workspaces","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/workspaces","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/workspaces","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/workspaces","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/workspaces","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/workspaces","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/workspaces","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/workspaces","traceId":"request-id"}}}}}},"post":{"operationId":"createWorkspace","tags":["Workspaces"],"summary":"create Workspace","description":"Acts on the signed-in user (no workspace role). Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"X-CSRF-Token","in":"header","required":false,"description":"Required for cookie-authenticated mutations; returned by sign-in/sign-up.","schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":100}},"required":["name"]},"example":{"name":"Noura"}}}},"responses":{"201":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","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)$"},"name":{"type":"string"},"logoUrl":{"type":["string","null"]},"role":{"type":"string","enum":["owner","admin","editor","viewer"]},"plan":{"type":"object","properties":{"slug":{"type":"string"},"name":{"type":"object","properties":{"ar":{"type":"string","minLength":1},"en":{"type":"string","minLength":1}},"required":["ar","en"]}},"required":["slug","name"]},"members":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"createdAt":{"type":"string"},"ownerId":{"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)$"},"seats":{"type":"object","properties":{"used":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"pending":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"limit":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]}},"required":["used","pending","limit"]},"settings":{"type":"object","properties":{"requireApproval":{"type":"boolean","description":"Editors and viewers need an approved review before downloading or sharing"},"defaultVoiceId":{"anyOf":[{"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)$"},{"type":"null"}]},"defaultDialect":{"anyOf":[{"type":"string","maxLength":20},{"type":"null"}]},"brandVoiceIds":{"maxItems":12,"type":"array","items":{"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":"Voices pinned for the whole team"},"defaultMemberCreditCap":{"anyOf":[{"type":"integer","minimum":0,"maximum":9007199254740991},{"type":"null"}],"description":"Monthly credit cap applied to new editors"}},"required":["requireApproval","defaultVoiceId","defaultDialect","brandVoiceIds","defaultMemberCreditCap"]},"inviteLink":{"anyOf":[{"type":"object","properties":{"url":{"type":"string"},"role":{"type":"string","enum":["owner","admin","editor","viewer"]},"expiresAt":{"type":"string"},"allowedDomain":{"type":["string","null"]}},"required":["url","role","expiresAt","allowedDomain"]},{"type":"null"}],"description":"Visible to admins"},"permissions":{"type":"array","items":{"type":"string"},"description":"What the current member may do, e.g. members.manage, billing.manage, reviews.decide, generate, download"}},"required":["id","name","logoUrl","role","plan","members","createdAt","ownerId","seats","settings","inviteLink","permissions"]},"example":{"id":"01990000-0000-7000-8000-000000000001","name":"Noura","logoUrl":"http://localhost:4000/example","role":"owner","plan":{"slug":"example","name":{"ar":"مثال","en":"example"}},"members":-9007199254740991,"createdAt":"2026-09-19T12:00:00.000Z","ownerId":"01990000-0000-7000-8000-000000000001","seats":{"used":-9007199254740991,"pending":-9007199254740991,"limit":-9007199254740991},"settings":{"requireApproval":true,"defaultVoiceId":"01990000-0000-7000-8000-000000000001","defaultDialect":"example","brandVoiceIds":["01990000-0000-7000-8000-000000000001"],"defaultMemberCreditCap":0},"inviteLink":{"url":"example","role":"owner","expiresAt":"2026-09-19T12:00:00.000Z","allowedDomain":"example"},"permissions":["example"]}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/workspaces","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/workspaces","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/workspaces","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/workspaces","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/workspaces","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/workspaces","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/workspaces","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/workspaces","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/workspaces","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/workspaces","traceId":"request-id"}}}}}}},"/v1/workspaces/{id}":{"get":{"operationId":"getWorkspace","tags":["Workspaces"],"summary":"get Workspace","description":"Requires workspace role viewer or above. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","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)$"},"name":{"type":"string"},"logoUrl":{"type":["string","null"]},"role":{"type":"string","enum":["owner","admin","editor","viewer"]},"plan":{"type":"object","properties":{"slug":{"type":"string"},"name":{"type":"object","properties":{"ar":{"type":"string","minLength":1},"en":{"type":"string","minLength":1}},"required":["ar","en"]}},"required":["slug","name"]},"members":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"createdAt":{"type":"string"},"ownerId":{"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)$"},"seats":{"type":"object","properties":{"used":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"pending":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"limit":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]}},"required":["used","pending","limit"]},"settings":{"type":"object","properties":{"requireApproval":{"type":"boolean","description":"Editors and viewers need an approved review before downloading or sharing"},"defaultVoiceId":{"anyOf":[{"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)$"},{"type":"null"}]},"defaultDialect":{"anyOf":[{"type":"string","maxLength":20},{"type":"null"}]},"brandVoiceIds":{"maxItems":12,"type":"array","items":{"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":"Voices pinned for the whole team"},"defaultMemberCreditCap":{"anyOf":[{"type":"integer","minimum":0,"maximum":9007199254740991},{"type":"null"}],"description":"Monthly credit cap applied to new editors"}},"required":["requireApproval","defaultVoiceId","defaultDialect","brandVoiceIds","defaultMemberCreditCap"]},"inviteLink":{"anyOf":[{"type":"object","properties":{"url":{"type":"string"},"role":{"type":"string","enum":["owner","admin","editor","viewer"]},"expiresAt":{"type":"string"},"allowedDomain":{"type":["string","null"]}},"required":["url","role","expiresAt","allowedDomain"]},{"type":"null"}],"description":"Visible to admins"},"permissions":{"type":"array","items":{"type":"string"},"description":"What the current member may do, e.g. members.manage, billing.manage, reviews.decide, generate, download"}},"required":["id","name","logoUrl","role","plan","members","createdAt","ownerId","seats","settings","inviteLink","permissions"]},"example":{"id":"01990000-0000-7000-8000-000000000001","name":"Noura","logoUrl":"http://localhost:4000/example","role":"owner","plan":{"slug":"example","name":{"ar":"مثال","en":"example"}},"members":-9007199254740991,"createdAt":"2026-09-19T12:00:00.000Z","ownerId":"01990000-0000-7000-8000-000000000001","seats":{"used":-9007199254740991,"pending":-9007199254740991,"limit":-9007199254740991},"settings":{"requireApproval":true,"defaultVoiceId":"01990000-0000-7000-8000-000000000001","defaultDialect":"example","brandVoiceIds":["01990000-0000-7000-8000-000000000001"],"defaultMemberCreditCap":0},"inviteLink":{"url":"example","role":"owner","expiresAt":"2026-09-19T12:00:00.000Z","allowedDomain":"example"},"permissions":["example"]}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/workspaces/{id}","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/workspaces/{id}","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/workspaces/{id}","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/workspaces/{id}","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/workspaces/{id}","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/workspaces/{id}","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/workspaces/{id}","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/workspaces/{id}","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/workspaces/{id}","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/workspaces/{id}","traceId":"request-id"}}}}}},"patch":{"operationId":"updateWorkspace","tags":["Workspaces"],"summary":"update Workspace","description":"Requires workspace role admin or above. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"X-CSRF-Token","in":"header","required":false,"description":"Required for cookie-authenticated mutations; returned by sign-in/sign-up.","schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":100},"logoUploadId":{"anyOf":[{"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)$"},{"type":"null"}]},"settings":{"type":"object","properties":{"requireApproval":{"type":"boolean","description":"Editors and viewers need an approved review before downloading or sharing"},"defaultVoiceId":{"anyOf":[{"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)$"},{"type":"null"}]},"defaultDialect":{"anyOf":[{"type":"string","maxLength":20},{"type":"null"}]},"brandVoiceIds":{"maxItems":12,"type":"array","items":{"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":"Voices pinned for the whole team"},"defaultMemberCreditCap":{"anyOf":[{"type":"integer","minimum":0,"maximum":9007199254740991},{"type":"null"}],"description":"Monthly credit cap applied to new editors"}}}}},"example":{"name":"Noura","logoUploadId":"01990000-0000-7000-8000-000000000001","settings":{"requireApproval":true,"defaultVoiceId":"01990000-0000-7000-8000-000000000001","defaultDialect":"example","brandVoiceIds":["01990000-0000-7000-8000-000000000001"],"defaultMemberCreditCap":0}}}}},"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","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)$"},"name":{"type":"string"},"logoUrl":{"type":["string","null"]},"role":{"type":"string","enum":["owner","admin","editor","viewer"]},"plan":{"type":"object","properties":{"slug":{"type":"string"},"name":{"type":"object","properties":{"ar":{"type":"string","minLength":1},"en":{"type":"string","minLength":1}},"required":["ar","en"]}},"required":["slug","name"]},"members":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"createdAt":{"type":"string"},"ownerId":{"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)$"},"seats":{"type":"object","properties":{"used":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"pending":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"limit":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]}},"required":["used","pending","limit"]},"settings":{"type":"object","properties":{"requireApproval":{"type":"boolean","description":"Editors and viewers need an approved review before downloading or sharing"},"defaultVoiceId":{"anyOf":[{"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)$"},{"type":"null"}]},"defaultDialect":{"anyOf":[{"type":"string","maxLength":20},{"type":"null"}]},"brandVoiceIds":{"maxItems":12,"type":"array","items":{"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":"Voices pinned for the whole team"},"defaultMemberCreditCap":{"anyOf":[{"type":"integer","minimum":0,"maximum":9007199254740991},{"type":"null"}],"description":"Monthly credit cap applied to new editors"}},"required":["requireApproval","defaultVoiceId","defaultDialect","brandVoiceIds","defaultMemberCreditCap"]},"inviteLink":{"anyOf":[{"type":"object","properties":{"url":{"type":"string"},"role":{"type":"string","enum":["owner","admin","editor","viewer"]},"expiresAt":{"type":"string"},"allowedDomain":{"type":["string","null"]}},"required":["url","role","expiresAt","allowedDomain"]},{"type":"null"}],"description":"Visible to admins"},"permissions":{"type":"array","items":{"type":"string"},"description":"What the current member may do, e.g. members.manage, billing.manage, reviews.decide, generate, download"}},"required":["id","name","logoUrl","role","plan","members","createdAt","ownerId","seats","settings","inviteLink","permissions"]},"example":{"id":"01990000-0000-7000-8000-000000000001","name":"Noura","logoUrl":"http://localhost:4000/example","role":"owner","plan":{"slug":"example","name":{"ar":"مثال","en":"example"}},"members":-9007199254740991,"createdAt":"2026-09-19T12:00:00.000Z","ownerId":"01990000-0000-7000-8000-000000000001","seats":{"used":-9007199254740991,"pending":-9007199254740991,"limit":-9007199254740991},"settings":{"requireApproval":true,"defaultVoiceId":"01990000-0000-7000-8000-000000000001","defaultDialect":"example","brandVoiceIds":["01990000-0000-7000-8000-000000000001"],"defaultMemberCreditCap":0},"inviteLink":{"url":"example","role":"owner","expiresAt":"2026-09-19T12:00:00.000Z","allowedDomain":"example"},"permissions":["example"]}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/workspaces/{id}","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/workspaces/{id}","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/workspaces/{id}","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/workspaces/{id}","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/workspaces/{id}","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/workspaces/{id}","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/workspaces/{id}","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/workspaces/{id}","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/workspaces/{id}","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/workspaces/{id}","traceId":"request-id"}}}}}},"delete":{"operationId":"deleteWorkspace","tags":["Workspaces"],"summary":"Delete the workspace (type its name to confirm); not allowed for the owner only workspace","description":"Requires workspace role owner or above. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"X-CSRF-Token","in":"header","required":false,"description":"Required for cookie-authenticated mutations; returned by sign-in/sign-up.","schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"confirmName":{"type":"string","minLength":1,"maxLength":100}},"required":["confirmName"]},"example":{"confirmName":"example"}}}},"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"ok":{"type":"boolean"}},"required":["ok"]},"example":{"ok":true}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/workspaces/{id}","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/workspaces/{id}","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/workspaces/{id}","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/workspaces/{id}","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/workspaces/{id}","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/workspaces/{id}","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/workspaces/{id}","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/workspaces/{id}","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/workspaces/{id}","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/workspaces/{id}","traceId":"request-id"}}}}}}},"/v1/workspaces/{id}/leave":{"post":{"operationId":"leaveWorkspace","tags":["Workspaces"],"summary":"Leave the workspace (owners transfer ownership first)","description":"Requires workspace role viewer or above. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"X-CSRF-Token","in":"header","required":false,"description":"Required for cookie-authenticated mutations; returned by sign-in/sign-up.","schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"ok":{"type":"boolean"}},"required":["ok"]},"example":{"ok":true}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/workspaces/{id}/leave","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/workspaces/{id}/leave","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/workspaces/{id}/leave","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/workspaces/{id}/leave","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/workspaces/{id}/leave","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/workspaces/{id}/leave","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/workspaces/{id}/leave","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/workspaces/{id}/leave","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/workspaces/{id}/leave","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/workspaces/{id}/leave","traceId":"request-id"}}}}}}},"/v1/workspaces/{id}/transfer":{"post":{"operationId":"transferWorkspace","tags":["Workspaces"],"summary":"Make another member the owner; the current owner becomes an admin","description":"Requires workspace role owner or above. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"X-CSRF-Token","in":"header","required":false,"description":"Required for cookie-authenticated mutations; returned by sign-in/sign-up.","schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"memberId":{"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)$"}},"required":["memberId"]},"example":{"memberId":"01990000-0000-7000-8000-000000000001"}}}},"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","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)$"},"name":{"type":"string"},"logoUrl":{"type":["string","null"]},"role":{"type":"string","enum":["owner","admin","editor","viewer"]},"plan":{"type":"object","properties":{"slug":{"type":"string"},"name":{"type":"object","properties":{"ar":{"type":"string","minLength":1},"en":{"type":"string","minLength":1}},"required":["ar","en"]}},"required":["slug","name"]},"members":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"createdAt":{"type":"string"},"ownerId":{"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)$"},"seats":{"type":"object","properties":{"used":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"pending":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"limit":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]}},"required":["used","pending","limit"]},"settings":{"type":"object","properties":{"requireApproval":{"type":"boolean","description":"Editors and viewers need an approved review before downloading or sharing"},"defaultVoiceId":{"anyOf":[{"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)$"},{"type":"null"}]},"defaultDialect":{"anyOf":[{"type":"string","maxLength":20},{"type":"null"}]},"brandVoiceIds":{"maxItems":12,"type":"array","items":{"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":"Voices pinned for the whole team"},"defaultMemberCreditCap":{"anyOf":[{"type":"integer","minimum":0,"maximum":9007199254740991},{"type":"null"}],"description":"Monthly credit cap applied to new editors"}},"required":["requireApproval","defaultVoiceId","defaultDialect","brandVoiceIds","defaultMemberCreditCap"]},"inviteLink":{"anyOf":[{"type":"object","properties":{"url":{"type":"string"},"role":{"type":"string","enum":["owner","admin","editor","viewer"]},"expiresAt":{"type":"string"},"allowedDomain":{"type":["string","null"]}},"required":["url","role","expiresAt","allowedDomain"]},{"type":"null"}],"description":"Visible to admins"},"permissions":{"type":"array","items":{"type":"string"},"description":"What the current member may do, e.g. members.manage, billing.manage, reviews.decide, generate, download"}},"required":["id","name","logoUrl","role","plan","members","createdAt","ownerId","seats","settings","inviteLink","permissions"]},"example":{"id":"01990000-0000-7000-8000-000000000001","name":"Noura","logoUrl":"http://localhost:4000/example","role":"owner","plan":{"slug":"example","name":{"ar":"مثال","en":"example"}},"members":-9007199254740991,"createdAt":"2026-09-19T12:00:00.000Z","ownerId":"01990000-0000-7000-8000-000000000001","seats":{"used":-9007199254740991,"pending":-9007199254740991,"limit":-9007199254740991},"settings":{"requireApproval":true,"defaultVoiceId":"01990000-0000-7000-8000-000000000001","defaultDialect":"example","brandVoiceIds":["01990000-0000-7000-8000-000000000001"],"defaultMemberCreditCap":0},"inviteLink":{"url":"example","role":"owner","expiresAt":"2026-09-19T12:00:00.000Z","allowedDomain":"example"},"permissions":["example"]}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/workspaces/{id}/transfer","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/workspaces/{id}/transfer","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/workspaces/{id}/transfer","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/workspaces/{id}/transfer","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/workspaces/{id}/transfer","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/workspaces/{id}/transfer","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/workspaces/{id}/transfer","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/workspaces/{id}/transfer","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/workspaces/{id}/transfer","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/workspaces/{id}/transfer","traceId":"request-id"}}}}}}},"/v1/workspaces/{id}/members":{"get":{"operationId":"listMembers","tags":["Workspaces"],"summary":"list Members","description":"Requires workspace role viewer or above. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"cursor","in":"query","required":false,"schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"schema":{"default":25,"type":"integer","minimum":1,"maximum":100}},{"name":"q","in":"query","required":false,"schema":{"type":"string","maxLength":200}}],"security":[{"session":[]},{"apiKey":[]}],"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"items":{"type":"array","items":{"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)$"},"userId":{"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)$"},"name":{"type":"string"},"email":{"type":"string"},"avatarUrl":{"type":["string","null"]},"role":{"type":"string","enum":["owner","admin","editor","viewer"]},"joinedAt":{"type":"string"},"lastActiveAt":{"type":["string","null"]},"creditCap":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"creditsThisMonth":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}},"required":["id","userId","name","email","avatarUrl","role","joinedAt","lastActiveAt","creditCap","creditsThisMonth"]}},"nextCursor":{"type":["string","null"]}},"required":["items","nextCursor"]},"example":{"items":[{"id":"01990000-0000-7000-8000-000000000001","userId":"01990000-0000-7000-8000-000000000001","name":"Noura","email":"example","avatarUrl":"http://localhost:4000/example","role":"owner","joinedAt":"2026-09-19T12:00:00.000Z","lastActiveAt":"2026-09-19T12:00:00.000Z","creditCap":-9007199254740991,"creditsThisMonth":-9007199254740991}],"nextCursor":"example"}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/workspaces/{id}/members","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/workspaces/{id}/members","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/workspaces/{id}/members","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/workspaces/{id}/members","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/workspaces/{id}/members","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/workspaces/{id}/members","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/workspaces/{id}/members","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/workspaces/{id}/members","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/workspaces/{id}/members","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/workspaces/{id}/members","traceId":"request-id"}}}}}}},"/v1/workspaces/{id}/members/{memberId}":{"patch":{"operationId":"updateMember","tags":["Workspaces"],"summary":"update Member","description":"Requires workspace role admin or above. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"memberId","in":"path","required":true,"schema":{"type":"string"}},{"name":"X-CSRF-Token","in":"header","required":false,"description":"Required for cookie-authenticated mutations; returned by sign-in/sign-up.","schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"role":{"type":"string","enum":["admin","editor","viewer"]},"creditCap":{"description":"Monthly credit cap for this member; null = no cap","anyOf":[{"type":"integer","minimum":0,"maximum":100000000},{"type":"null"}]}}},"example":{"role":"admin","creditCap":0}}}},"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","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)$"},"userId":{"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)$"},"name":{"type":"string"},"email":{"type":"string"},"avatarUrl":{"type":["string","null"]},"role":{"type":"string","enum":["owner","admin","editor","viewer"]},"joinedAt":{"type":"string"},"lastActiveAt":{"type":["string","null"]},"creditCap":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"creditsThisMonth":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}},"required":["id","userId","name","email","avatarUrl","role","joinedAt","lastActiveAt","creditCap","creditsThisMonth"]},"example":{"id":"01990000-0000-7000-8000-000000000001","userId":"01990000-0000-7000-8000-000000000001","name":"Noura","email":"example","avatarUrl":"http://localhost:4000/example","role":"owner","joinedAt":"2026-09-19T12:00:00.000Z","lastActiveAt":"2026-09-19T12:00:00.000Z","creditCap":-9007199254740991,"creditsThisMonth":-9007199254740991}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/workspaces/{id}/members/{memberId}","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/workspaces/{id}/members/{memberId}","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/workspaces/{id}/members/{memberId}","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/workspaces/{id}/members/{memberId}","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/workspaces/{id}/members/{memberId}","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/workspaces/{id}/members/{memberId}","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/workspaces/{id}/members/{memberId}","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/workspaces/{id}/members/{memberId}","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/workspaces/{id}/members/{memberId}","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/workspaces/{id}/members/{memberId}","traceId":"request-id"}}}}}},"delete":{"operationId":"removeMember","tags":["Workspaces"],"summary":"remove Member","description":"Requires workspace role admin or above. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"memberId","in":"path","required":true,"schema":{"type":"string"}},{"name":"X-CSRF-Token","in":"header","required":false,"description":"Required for cookie-authenticated mutations; returned by sign-in/sign-up.","schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"ok":{"type":"boolean"}},"required":["ok"]},"example":{"ok":true}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/workspaces/{id}/members/{memberId}","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/workspaces/{id}/members/{memberId}","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/workspaces/{id}/members/{memberId}","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/workspaces/{id}/members/{memberId}","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/workspaces/{id}/members/{memberId}","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/workspaces/{id}/members/{memberId}","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/workspaces/{id}/members/{memberId}","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/workspaces/{id}/members/{memberId}","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/workspaces/{id}/members/{memberId}","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/workspaces/{id}/members/{memberId}","traceId":"request-id"}}}}}}},"/v1/workspaces/{id}/invites":{"get":{"operationId":"listInvites","tags":["Workspaces"],"summary":"list Invites","description":"Requires workspace role admin or above. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"items":{"type":"array","items":{"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)$"},"email":{"type":"string"},"role":{"type":"string","enum":["owner","admin","editor","viewer"]},"invitedBy":{"anyOf":[{"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)$"},"name":{"type":"string"}},"required":["id","name"]},{"type":"null"}]},"createdAt":{"type":"string"},"expiresAt":{"type":"string"},"lastSentAt":{"type":["string","null"]}},"required":["id","email","role","invitedBy","createdAt","expiresAt","lastSentAt"]}},"nextCursor":{"type":["string","null"]}},"required":["items","nextCursor"]},"example":{"items":[{"id":"01990000-0000-7000-8000-000000000001","email":"example","role":"owner","invitedBy":{"id":"01990000-0000-7000-8000-000000000001","name":"Noura"},"createdAt":"2026-09-19T12:00:00.000Z","expiresAt":"2026-09-19T12:00:00.000Z","lastSentAt":"2026-09-19T12:00:00.000Z"}],"nextCursor":"example"}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/workspaces/{id}/invites","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/workspaces/{id}/invites","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/workspaces/{id}/invites","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/workspaces/{id}/invites","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/workspaces/{id}/invites","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/workspaces/{id}/invites","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/workspaces/{id}/invites","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/workspaces/{id}/invites","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/workspaces/{id}/invites","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/workspaces/{id}/invites","traceId":"request-id"}}}}}},"post":{"operationId":"inviteMember","tags":["Workspaces"],"summary":"invite Member","description":"Requires workspace role admin or above. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"X-CSRF-Token","in":"header","required":false,"description":"Required for cookie-authenticated mutations; returned by sign-in/sign-up.","schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"emails":{"minItems":1,"maxItems":20,"type":"array","items":{"type":"string","maxLength":254,"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,}$"}},"role":{"type":"string","enum":["admin","editor","viewer"]},"message":{"type":"string","maxLength":500}},"required":["emails","role"]},"example":{"emails":["demo@vocla.ai"],"role":"admin","message":"example"}}}},"responses":{"201":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"items":{"type":"array","items":{"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)$"},"email":{"type":"string"},"role":{"type":"string","enum":["owner","admin","editor","viewer"]},"invitedBy":{"anyOf":[{"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)$"},"name":{"type":"string"}},"required":["id","name"]},{"type":"null"}]},"createdAt":{"type":"string"},"expiresAt":{"type":"string"},"lastSentAt":{"type":["string","null"]}},"required":["id","email","role","invitedBy","createdAt","expiresAt","lastSentAt"]}},"skipped":{"type":"array","items":{"type":"object","properties":{"email":{"type":"string"},"reason":{"type":"string","enum":["member","invited","seats","invalid"]}},"required":["email","reason"]}}},"required":["items","skipped"]},"example":{"items":[{"id":"01990000-0000-7000-8000-000000000001","email":"example","role":"owner","invitedBy":{"id":"01990000-0000-7000-8000-000000000001","name":"Noura"},"createdAt":"2026-09-19T12:00:00.000Z","expiresAt":"2026-09-19T12:00:00.000Z","lastSentAt":"2026-09-19T12:00:00.000Z"}],"skipped":[{"email":"example","reason":"member"}]}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/workspaces/{id}/invites","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/workspaces/{id}/invites","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/workspaces/{id}/invites","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/workspaces/{id}/invites","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/workspaces/{id}/invites","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/workspaces/{id}/invites","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/workspaces/{id}/invites","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/workspaces/{id}/invites","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/workspaces/{id}/invites","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/workspaces/{id}/invites","traceId":"request-id"}}}}}}},"/v1/workspaces/{id}/invites/{inviteId}/resend":{"post":{"operationId":"resendInvite","tags":["Workspaces"],"summary":"resend Invite","description":"Requires workspace role admin or above. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"inviteId","in":"path","required":true,"schema":{"type":"string"}},{"name":"X-CSRF-Token","in":"header","required":false,"description":"Required for cookie-authenticated mutations; returned by sign-in/sign-up.","schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","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)$"},"email":{"type":"string"},"role":{"type":"string","enum":["owner","admin","editor","viewer"]},"invitedBy":{"anyOf":[{"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)$"},"name":{"type":"string"}},"required":["id","name"]},{"type":"null"}]},"createdAt":{"type":"string"},"expiresAt":{"type":"string"},"lastSentAt":{"type":["string","null"]}},"required":["id","email","role","invitedBy","createdAt","expiresAt","lastSentAt"]},"example":{"id":"01990000-0000-7000-8000-000000000001","email":"example","role":"owner","invitedBy":{"id":"01990000-0000-7000-8000-000000000001","name":"Noura"},"createdAt":"2026-09-19T12:00:00.000Z","expiresAt":"2026-09-19T12:00:00.000Z","lastSentAt":"2026-09-19T12:00:00.000Z"}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/workspaces/{id}/invites/{inviteId}/resend","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/workspaces/{id}/invites/{inviteId}/resend","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/workspaces/{id}/invites/{inviteId}/resend","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/workspaces/{id}/invites/{inviteId}/resend","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/workspaces/{id}/invites/{inviteId}/resend","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/workspaces/{id}/invites/{inviteId}/resend","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/workspaces/{id}/invites/{inviteId}/resend","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/workspaces/{id}/invites/{inviteId}/resend","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/workspaces/{id}/invites/{inviteId}/resend","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/workspaces/{id}/invites/{inviteId}/resend","traceId":"request-id"}}}}}}},"/v1/workspaces/{id}/invites/{inviteId}":{"delete":{"operationId":"revokeInvite","tags":["Workspaces"],"summary":"revoke Invite","description":"Requires workspace role admin or above. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"inviteId","in":"path","required":true,"schema":{"type":"string"}},{"name":"X-CSRF-Token","in":"header","required":false,"description":"Required for cookie-authenticated mutations; returned by sign-in/sign-up.","schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"ok":{"type":"boolean"}},"required":["ok"]},"example":{"ok":true}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/workspaces/{id}/invites/{inviteId}","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/workspaces/{id}/invites/{inviteId}","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/workspaces/{id}/invites/{inviteId}","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/workspaces/{id}/invites/{inviteId}","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/workspaces/{id}/invites/{inviteId}","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/workspaces/{id}/invites/{inviteId}","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/workspaces/{id}/invites/{inviteId}","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/workspaces/{id}/invites/{inviteId}","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/workspaces/{id}/invites/{inviteId}","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/workspaces/{id}/invites/{inviteId}","traceId":"request-id"}}}}}}},"/v1/workspaces/{id}/invite-link":{"put":{"operationId":"setInviteLink","tags":["Workspaces"],"summary":"Create or replace the shareable join link","description":"Requires workspace role admin or above. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"X-CSRF-Token","in":"header","required":false,"description":"Required for cookie-authenticated mutations; returned by sign-in/sign-up.","schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"role":{"type":"string","enum":["editor","viewer"]},"expiresInDays":{"default":7,"type":"integer","minimum":1,"maximum":30},"allowedDomain":{"description":"Only emails at this domain may join","type":"string","pattern":"^[a-z0-9.-]+\\.[a-z]{2,}$"}},"required":["role"]},"example":{"role":"editor","expiresInDays":7,"allowedDomain":"example"}}}},"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"url":{"type":"string"},"role":{"type":"string","enum":["owner","admin","editor","viewer"]},"expiresAt":{"type":"string"},"allowedDomain":{"type":["string","null"]}},"required":["url","role","expiresAt","allowedDomain"]},"example":{"url":"example","role":"owner","expiresAt":"2026-09-19T12:00:00.000Z","allowedDomain":"example"}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/workspaces/{id}/invite-link","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/workspaces/{id}/invite-link","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/workspaces/{id}/invite-link","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/workspaces/{id}/invite-link","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/workspaces/{id}/invite-link","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/workspaces/{id}/invite-link","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/workspaces/{id}/invite-link","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/workspaces/{id}/invite-link","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/workspaces/{id}/invite-link","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/workspaces/{id}/invite-link","traceId":"request-id"}}}}}},"delete":{"operationId":"deleteInviteLink","tags":["Workspaces"],"summary":"delete Invite Link","description":"Requires workspace role admin or above. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"X-CSRF-Token","in":"header","required":false,"description":"Required for cookie-authenticated mutations; returned by sign-in/sign-up.","schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"ok":{"type":"boolean"}},"required":["ok"]},"example":{"ok":true}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/workspaces/{id}/invite-link","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/workspaces/{id}/invite-link","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/workspaces/{id}/invite-link","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/workspaces/{id}/invite-link","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/workspaces/{id}/invite-link","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/workspaces/{id}/invite-link","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/workspaces/{id}/invite-link","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/workspaces/{id}/invite-link","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/workspaces/{id}/invite-link","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/workspaces/{id}/invite-link","traceId":"request-id"}}}}}}},"/v1/invites/{token}":{"get":{"operationId":"previewInvite","tags":["Workspaces"],"summary":"What an invite or join link leads to, for the accept page","description":"Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"token","in":"path","required":true,"schema":{"type":"string"}}],"security":[],"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"valid":{"type":"boolean"},"reason":{"anyOf":[{"type":"string","enum":["expired","revoked","used","domain","seats","not_found"]},{"type":"null"}]},"workspace":{"anyOf":[{"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)$"},"name":{"type":"string"},"logoUrl":{"type":["string","null"]},"members":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}},"required":["id","name","logoUrl","members"]},{"type":"null"}]},"role":{"anyOf":[{"type":"string","enum":["owner","admin","editor","viewer"]},{"type":"null"}]},"invitedBy":{"type":["string","null"]},"email":{"description":"Personal invites are for this address","type":["string","null"]},"allowedDomain":{"type":["string","null"]},"expiresAt":{"type":["string","null"]}},"required":["valid","reason","workspace","role","invitedBy","email","allowedDomain","expiresAt"]},"example":{"valid":true,"reason":"expired","workspace":{"id":"01990000-0000-7000-8000-000000000001","name":"Noura","logoUrl":"http://localhost:4000/example","members":-9007199254740991},"role":"owner","invitedBy":"example","email":"example","allowedDomain":"example","expiresAt":"2026-09-19T12:00:00.000Z"}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/invites/{token}","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/invites/{token}","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/invites/{token}","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/invites/{token}","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/invites/{token}","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/invites/{token}","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/invites/{token}","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/invites/{token}","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/invites/{token}","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/invites/{token}","traceId":"request-id"}}}}}}},"/v1/invites/accept":{"post":{"operationId":"acceptInvite","tags":["Workspaces"],"summary":"accept Invite","description":"Acts on the signed-in user (no workspace role). Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"X-CSRF-Token","in":"header","required":false,"description":"Required for cookie-authenticated mutations; returned by sign-in/sign-up.","schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"token":{"type":"string","minLength":1,"maxLength":200}},"required":["token"]},"example":{"token":"example"}}}},"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"workspaceId":{"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)$"},"role":{"type":"string","enum":["owner","admin","editor","viewer"]}},"required":["workspaceId","role"]},"example":{"workspaceId":"01990000-0000-7000-8000-000000000001","role":"owner"}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/invites/accept","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/invites/accept","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/invites/accept","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/invites/accept","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/invites/accept","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/invites/accept","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/invites/accept","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/invites/accept","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/invites/accept","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/invites/accept","traceId":"request-id"}}}}}}},"/v1/workspaces/{id}/usage":{"get":{"operationId":"workspaceUsage","tags":["Workspaces"],"summary":"workspace Usage","description":"Requires workspace role admin or above. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"from","in":"query","required":false,"schema":{"type":"string","format":"date","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])))$"}},{"name":"to","in":"query","required":false,"schema":{"type":"string","format":"date","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])))$"}},{"name":"groupBy","in":"query","required":false,"schema":{"default":"member","type":"string","enum":["member","client","type","day"]}}],"security":[{"session":[]},{"apiKey":[]}],"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"from":{"type":"string"},"to":{"type":"string"},"groupBy":{"type":"string","enum":["member","client","type","day"]},"totals":{"type":"object","properties":{"credits":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"generations":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"seconds":{"type":"number"}},"required":["credits","generations","seconds"]},"rows":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string"},"label":{"type":"string"},"credits":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"generations":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"seconds":{"type":"number"}},"required":["key","label","credits","generations","seconds"]}}},"required":["from","to","groupBy","totals","rows"]},"example":{"from":"example","to":"example","groupBy":"member","totals":{"credits":-9007199254740991,"generations":-9007199254740991,"seconds":1},"rows":[{"key":"example","label":"example","credits":-9007199254740991,"generations":-9007199254740991,"seconds":1}]}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/workspaces/{id}/usage","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/workspaces/{id}/usage","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/workspaces/{id}/usage","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/workspaces/{id}/usage","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/workspaces/{id}/usage","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/workspaces/{id}/usage","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/workspaces/{id}/usage","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/workspaces/{id}/usage","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/workspaces/{id}/usage","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/workspaces/{id}/usage","traceId":"request-id"}}}}}}},"/v1/workspaces/{id}/activity":{"get":{"operationId":"workspaceActivity","tags":["Workspaces"],"summary":"workspace Activity","description":"Requires workspace role admin or above. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"cursor","in":"query","required":false,"schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"schema":{"default":25,"type":"integer","minimum":1,"maximum":100}},{"name":"q","in":"query","required":false,"schema":{"type":"string","maxLength":200}},{"name":"actorId","in":"query","required":false,"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)$"}},{"name":"action","in":"query","required":false,"schema":{"type":"string","maxLength":60}}],"security":[{"session":[]},{"apiKey":[]}],"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"items":{"type":"array","items":{"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)$"},"at":{"type":"string"},"actor":{"anyOf":[{"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)$"},"name":{"type":"string"},"avatarUrl":{"type":["string","null"]}},"required":["id","name","avatarUrl"]},{"type":"null"}]},"action":{"type":"string","description":"e.g. member.invited, member.role_changed, review.approved, generation.downloaded"},"target":{"anyOf":[{"type":"object","properties":{"type":{"type":"string"},"id":{"type":"string"},"label":{"type":"string"}},"required":["type","id","label"]},{"type":"null"}]},"meta":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}}},"required":["id","at","actor","action","target","meta"]}},"nextCursor":{"type":["string","null"]}},"required":["items","nextCursor"]},"example":{"items":[{"id":"01990000-0000-7000-8000-000000000001","at":"example","actor":{"id":"01990000-0000-7000-8000-000000000001","name":"Noura","avatarUrl":"http://localhost:4000/example"},"action":"example","target":{"type":"example","id":"example","label":"example"},"meta":{}}],"nextCursor":"example"}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/workspaces/{id}/activity","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/workspaces/{id}/activity","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/workspaces/{id}/activity","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/workspaces/{id}/activity","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/workspaces/{id}/activity","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/workspaces/{id}/activity","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/workspaces/{id}/activity","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/workspaces/{id}/activity","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/workspaces/{id}/activity","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/workspaces/{id}/activity","traceId":"request-id"}}}}}}},"/v1/clients":{"get":{"operationId":"listClients","tags":["Workspaces"],"summary":"list Clients","description":"Requires workspace role viewer or above. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"cursor","in":"query","required":false,"schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"schema":{"default":25,"type":"integer","minimum":1,"maximum":100}},{"name":"q","in":"query","required":false,"schema":{"type":"string","maxLength":200}},{"name":"archived","in":"query","required":false,"schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"items":{"type":"array","items":{"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)$"},"name":{"type":"string"},"color":{"type":"string"},"note":{"type":["string","null"]},"archived":{"type":"boolean"},"createdAt":{"type":"string"},"creditsThisMonth":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}},"required":["id","name","color","note","archived","createdAt","creditsThisMonth"]}},"nextCursor":{"type":["string","null"]}},"required":["items","nextCursor"]},"example":{"items":[{"id":"01990000-0000-7000-8000-000000000001","name":"Noura","color":"example","note":"example","archived":true,"createdAt":"2026-09-19T12:00:00.000Z","creditsThisMonth":-9007199254740991}],"nextCursor":"example"}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/clients","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/clients","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/clients","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/clients","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/clients","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/clients","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/clients","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/clients","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/clients","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/clients","traceId":"request-id"}}}}}},"post":{"operationId":"createClient","tags":["Workspaces"],"summary":"create Client","description":"Requires workspace role admin or above. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"X-CSRF-Token","in":"header","required":false,"description":"Required for cookie-authenticated mutations; returned by sign-in/sign-up.","schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":80},"color":{"type":"string","pattern":"^#[0-9a-f]{6}$"},"note":{"type":"string","maxLength":300}},"required":["name"]},"example":{"name":"Noura","color":"example","note":"example"}}}},"responses":{"201":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","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)$"},"name":{"type":"string"},"color":{"type":"string"},"note":{"type":["string","null"]},"archived":{"type":"boolean"},"createdAt":{"type":"string"},"creditsThisMonth":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}},"required":["id","name","color","note","archived","createdAt","creditsThisMonth"]},"example":{"id":"01990000-0000-7000-8000-000000000001","name":"Noura","color":"example","note":"example","archived":true,"createdAt":"2026-09-19T12:00:00.000Z","creditsThisMonth":-9007199254740991}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/clients","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/clients","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/clients","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/clients","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/clients","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/clients","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/clients","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/clients","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/clients","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/clients","traceId":"request-id"}}}}}}},"/v1/clients/{id}":{"patch":{"operationId":"updateClient","tags":["Workspaces"],"summary":"update Client","description":"Requires workspace role admin or above. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"X-CSRF-Token","in":"header","required":false,"description":"Required for cookie-authenticated mutations; returned by sign-in/sign-up.","schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":80},"color":{"type":"string","pattern":"^#[0-9a-f]{6}$"},"note":{"type":"string","maxLength":300},"archived":{"type":"boolean"}}},"example":{"name":"Noura","color":"example","note":"example","archived":true}}}},"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","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)$"},"name":{"type":"string"},"color":{"type":"string"},"note":{"type":["string","null"]},"archived":{"type":"boolean"},"createdAt":{"type":"string"},"creditsThisMonth":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}},"required":["id","name","color","note","archived","createdAt","creditsThisMonth"]},"example":{"id":"01990000-0000-7000-8000-000000000001","name":"Noura","color":"example","note":"example","archived":true,"createdAt":"2026-09-19T12:00:00.000Z","creditsThisMonth":-9007199254740991}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/clients/{id}","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/clients/{id}","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/clients/{id}","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/clients/{id}","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/clients/{id}","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/clients/{id}","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/clients/{id}","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/clients/{id}","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/clients/{id}","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/clients/{id}","traceId":"request-id"}}}}}},"delete":{"operationId":"deleteClient","tags":["Workspaces"],"summary":"delete Client","description":"Requires workspace role admin or above. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"X-CSRF-Token","in":"header","required":false,"description":"Required for cookie-authenticated mutations; returned by sign-in/sign-up.","schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"ok":{"type":"boolean"}},"required":["ok"]},"example":{"ok":true}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/clients/{id}","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/clients/{id}","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/clients/{id}","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/clients/{id}","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/clients/{id}","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/clients/{id}","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/clients/{id}","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/clients/{id}","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/clients/{id}","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/clients/{id}","traceId":"request-id"}}}}}}},"/v1/assignments":{"put":{"operationId":"assignClient","tags":["Workspaces"],"summary":"Tag generations, dubbing projects or transcripts with a client (null clears it); caption renders of a transcript follow it","description":"Requires workspace role editor or above. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"X-CSRF-Token","in":"header","required":false,"description":"Required for cookie-authenticated mutations; returned by sign-in/sign-up.","schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"clientId":{"anyOf":[{"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)$"},{"type":"null"}]},"items":{"minItems":1,"maxItems":200,"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["generation","dub","transcript"]},"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)$"}},"required":["type","id"]}}},"required":["clientId","items"]},"example":{"clientId":"01990000-0000-7000-8000-000000000001","items":[{"type":"generation","id":"01990000-0000-7000-8000-000000000001"}]}}}},"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"ok":{"type":"boolean"}},"required":["ok"]},"example":{"ok":true}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/assignments","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/assignments","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/assignments","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/assignments","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/assignments","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/assignments","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/assignments","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/assignments","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/assignments","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/assignments","traceId":"request-id"}}}}}}},"/v1/reviews":{"get":{"operationId":"listReviews","tags":["Reviews"],"summary":"list Reviews","description":"Requires workspace role viewer or above. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"cursor","in":"query","required":false,"schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"schema":{"default":25,"type":"integer","minimum":1,"maximum":100}},{"name":"q","in":"query","required":false,"schema":{"type":"string","maxLength":200}},{"name":"status","in":"query","required":false,"schema":{"type":"string","enum":["pending","approved","changes_requested","cancelled"]}},{"name":"mine","in":"query","required":false,"schema":{"type":"string"}},{"name":"subjectType","in":"query","required":false,"schema":{"type":"string","enum":["generation","dub"]}},{"name":"subjectId","in":"query","required":false,"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)$"}}],"security":[{"session":[]},{"apiKey":[]}],"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"items":{"type":"array","items":{"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)$"},"status":{"type":"string","enum":["pending","approved","changes_requested","cancelled"]},"subject":{"type":"object","properties":{"type":{"type":"string","enum":["generation","dub"]},"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)$"},"title":{"type":"string"},"kind":{"type":"string","description":"tts, music, dub..."},"previewUrl":{"type":["string","null"]},"generationId":{"anyOf":[{"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)$"},{"type":"null"}],"description":"The exact render under review"}},"required":["type","id","title","kind","previewUrl","generationId"]},"note":{"type":["string","null"]},"submittedBy":{"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)$"},"name":{"type":"string"}},"required":["id","name"]},"submittedAt":{"type":"string"},"decidedBy":{"anyOf":[{"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)$"},"name":{"type":"string"}},"required":["id","name"]},{"type":"null"}]},"decidedAt":{"type":["string","null"]},"decisionNote":{"type":["string","null"]},"comments":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}},"required":["id","status","subject","note","submittedBy","submittedAt","decidedBy","decidedAt","decisionNote","comments"]}},"nextCursor":{"type":["string","null"]}},"required":["items","nextCursor"]},"example":{"items":[{"id":"01990000-0000-7000-8000-000000000001","status":"pending","subject":{"type":"generation","id":"01990000-0000-7000-8000-000000000001","title":"example","kind":"example","previewUrl":"http://localhost:4000/example","generationId":"01990000-0000-7000-8000-000000000001"},"note":"example","submittedBy":{"id":"01990000-0000-7000-8000-000000000001","name":"Noura"},"submittedAt":"2026-09-19T12:00:00.000Z","decidedBy":{"id":"01990000-0000-7000-8000-000000000001","name":"Noura"},"decidedAt":"2026-09-19T12:00:00.000Z","decisionNote":"example","comments":-9007199254740991}],"nextCursor":"example"}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/reviews","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/reviews","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/reviews","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/reviews","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/reviews","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/reviews","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/reviews","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/reviews","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/reviews","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/reviews","traceId":"request-id"}}}}}},"post":{"operationId":"submitReview","tags":["Reviews"],"summary":"Submit a generation or a dubbing render for approval","description":"Requires workspace role editor or above. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"X-CSRF-Token","in":"header","required":false,"description":"Required for cookie-authenticated mutations; returned by sign-in/sign-up.","schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"subjectType":{"type":"string","enum":["generation","dub"]},"subjectId":{"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)$"},"note":{"type":"string","maxLength":1000}},"required":["subjectType","subjectId"]},"example":{"subjectType":"generation","subjectId":"01990000-0000-7000-8000-000000000001","note":"example"}}}},"responses":{"201":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","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)$"},"status":{"type":"string","enum":["pending","approved","changes_requested","cancelled"]},"subject":{"type":"object","properties":{"type":{"type":"string","enum":["generation","dub"]},"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)$"},"title":{"type":"string"},"kind":{"type":"string","description":"tts, music, dub..."},"previewUrl":{"type":["string","null"]},"generationId":{"anyOf":[{"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)$"},{"type":"null"}],"description":"The exact render under review"}},"required":["type","id","title","kind","previewUrl","generationId"]},"note":{"type":["string","null"]},"submittedBy":{"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)$"},"name":{"type":"string"}},"required":["id","name"]},"submittedAt":{"type":"string"},"decidedBy":{"anyOf":[{"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)$"},"name":{"type":"string"}},"required":["id","name"]},{"type":"null"}]},"decidedAt":{"type":["string","null"]},"decisionNote":{"type":["string","null"]},"comments":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}},"required":["id","status","subject","note","submittedBy","submittedAt","decidedBy","decidedAt","decisionNote","comments"]},"example":{"id":"01990000-0000-7000-8000-000000000001","status":"pending","subject":{"type":"generation","id":"01990000-0000-7000-8000-000000000001","title":"example","kind":"example","previewUrl":"http://localhost:4000/example","generationId":"01990000-0000-7000-8000-000000000001"},"note":"example","submittedBy":{"id":"01990000-0000-7000-8000-000000000001","name":"Noura"},"submittedAt":"2026-09-19T12:00:00.000Z","decidedBy":{"id":"01990000-0000-7000-8000-000000000001","name":"Noura"},"decidedAt":"2026-09-19T12:00:00.000Z","decisionNote":"example","comments":-9007199254740991}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/reviews","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/reviews","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/reviews","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/reviews","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/reviews","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/reviews","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/reviews","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/reviews","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/reviews","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/reviews","traceId":"request-id"}}}}}}},"/v1/reviews/{id}":{"get":{"operationId":"getReview","tags":["Reviews"],"summary":"get Review","description":"Requires workspace role viewer or above. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","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)$"},"status":{"type":"string","enum":["pending","approved","changes_requested","cancelled"]},"subject":{"type":"object","properties":{"type":{"type":"string","enum":["generation","dub"]},"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)$"},"title":{"type":"string"},"kind":{"type":"string","description":"tts, music, dub..."},"previewUrl":{"type":["string","null"]},"generationId":{"anyOf":[{"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)$"},{"type":"null"}],"description":"The exact render under review"}},"required":["type","id","title","kind","previewUrl","generationId"]},"note":{"type":["string","null"]},"submittedBy":{"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)$"},"name":{"type":"string"}},"required":["id","name"]},"submittedAt":{"type":"string"},"decidedBy":{"anyOf":[{"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)$"},"name":{"type":"string"}},"required":["id","name"]},{"type":"null"}]},"decidedAt":{"type":["string","null"]},"decisionNote":{"type":["string","null"]},"comments":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}},"required":["id","status","subject","note","submittedBy","submittedAt","decidedBy","decidedAt","decisionNote","comments"]},"example":{"id":"01990000-0000-7000-8000-000000000001","status":"pending","subject":{"type":"generation","id":"01990000-0000-7000-8000-000000000001","title":"example","kind":"example","previewUrl":"http://localhost:4000/example","generationId":"01990000-0000-7000-8000-000000000001"},"note":"example","submittedBy":{"id":"01990000-0000-7000-8000-000000000001","name":"Noura"},"submittedAt":"2026-09-19T12:00:00.000Z","decidedBy":{"id":"01990000-0000-7000-8000-000000000001","name":"Noura"},"decidedAt":"2026-09-19T12:00:00.000Z","decisionNote":"example","comments":-9007199254740991}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/reviews/{id}","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/reviews/{id}","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/reviews/{id}","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/reviews/{id}","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/reviews/{id}","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/reviews/{id}","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/reviews/{id}","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/reviews/{id}","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/reviews/{id}","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/reviews/{id}","traceId":"request-id"}}}}}}},"/v1/reviews/{id}/decision":{"post":{"operationId":"decideReview","tags":["Reviews"],"summary":"decide Review","description":"Requires workspace role admin or above. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"X-CSRF-Token","in":"header","required":false,"description":"Required for cookie-authenticated mutations; returned by sign-in/sign-up.","schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"decision":{"type":"string","enum":["approve","request_changes"]},"note":{"type":"string","maxLength":1000}},"required":["decision"]},"example":{"decision":"approve","note":"example"}}}},"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","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)$"},"status":{"type":"string","enum":["pending","approved","changes_requested","cancelled"]},"subject":{"type":"object","properties":{"type":{"type":"string","enum":["generation","dub"]},"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)$"},"title":{"type":"string"},"kind":{"type":"string","description":"tts, music, dub..."},"previewUrl":{"type":["string","null"]},"generationId":{"anyOf":[{"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)$"},{"type":"null"}],"description":"The exact render under review"}},"required":["type","id","title","kind","previewUrl","generationId"]},"note":{"type":["string","null"]},"submittedBy":{"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)$"},"name":{"type":"string"}},"required":["id","name"]},"submittedAt":{"type":"string"},"decidedBy":{"anyOf":[{"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)$"},"name":{"type":"string"}},"required":["id","name"]},{"type":"null"}]},"decidedAt":{"type":["string","null"]},"decisionNote":{"type":["string","null"]},"comments":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}},"required":["id","status","subject","note","submittedBy","submittedAt","decidedBy","decidedAt","decisionNote","comments"]},"example":{"id":"01990000-0000-7000-8000-000000000001","status":"pending","subject":{"type":"generation","id":"01990000-0000-7000-8000-000000000001","title":"example","kind":"example","previewUrl":"http://localhost:4000/example","generationId":"01990000-0000-7000-8000-000000000001"},"note":"example","submittedBy":{"id":"01990000-0000-7000-8000-000000000001","name":"Noura"},"submittedAt":"2026-09-19T12:00:00.000Z","decidedBy":{"id":"01990000-0000-7000-8000-000000000001","name":"Noura"},"decidedAt":"2026-09-19T12:00:00.000Z","decisionNote":"example","comments":-9007199254740991}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/reviews/{id}/decision","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/reviews/{id}/decision","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/reviews/{id}/decision","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/reviews/{id}/decision","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/reviews/{id}/decision","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/reviews/{id}/decision","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/reviews/{id}/decision","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/reviews/{id}/decision","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/reviews/{id}/decision","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/reviews/{id}/decision","traceId":"request-id"}}}}}}},"/v1/reviews/{id}/cancel":{"post":{"operationId":"cancelReview","tags":["Reviews"],"summary":"Withdraw a pending review (the submitter or an admin)","description":"Requires workspace role editor or above. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"X-CSRF-Token","in":"header","required":false,"description":"Required for cookie-authenticated mutations; returned by sign-in/sign-up.","schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","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)$"},"status":{"type":"string","enum":["pending","approved","changes_requested","cancelled"]},"subject":{"type":"object","properties":{"type":{"type":"string","enum":["generation","dub"]},"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)$"},"title":{"type":"string"},"kind":{"type":"string","description":"tts, music, dub..."},"previewUrl":{"type":["string","null"]},"generationId":{"anyOf":[{"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)$"},{"type":"null"}],"description":"The exact render under review"}},"required":["type","id","title","kind","previewUrl","generationId"]},"note":{"type":["string","null"]},"submittedBy":{"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)$"},"name":{"type":"string"}},"required":["id","name"]},"submittedAt":{"type":"string"},"decidedBy":{"anyOf":[{"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)$"},"name":{"type":"string"}},"required":["id","name"]},{"type":"null"}]},"decidedAt":{"type":["string","null"]},"decisionNote":{"type":["string","null"]},"comments":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}},"required":["id","status","subject","note","submittedBy","submittedAt","decidedBy","decidedAt","decisionNote","comments"]},"example":{"id":"01990000-0000-7000-8000-000000000001","status":"pending","subject":{"type":"generation","id":"01990000-0000-7000-8000-000000000001","title":"example","kind":"example","previewUrl":"http://localhost:4000/example","generationId":"01990000-0000-7000-8000-000000000001"},"note":"example","submittedBy":{"id":"01990000-0000-7000-8000-000000000001","name":"Noura"},"submittedAt":"2026-09-19T12:00:00.000Z","decidedBy":{"id":"01990000-0000-7000-8000-000000000001","name":"Noura"},"decidedAt":"2026-09-19T12:00:00.000Z","decisionNote":"example","comments":-9007199254740991}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/reviews/{id}/cancel","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/reviews/{id}/cancel","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/reviews/{id}/cancel","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/reviews/{id}/cancel","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/reviews/{id}/cancel","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/reviews/{id}/cancel","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/reviews/{id}/cancel","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/reviews/{id}/cancel","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/reviews/{id}/cancel","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/reviews/{id}/cancel","traceId":"request-id"}}}}}}},"/v1/comments":{"get":{"operationId":"listComments","tags":["Reviews"],"summary":"list Comments","description":"Requires workspace role viewer or above. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"cursor","in":"query","required":false,"schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"schema":{"default":25,"type":"integer","minimum":1,"maximum":100}},{"name":"q","in":"query","required":false,"schema":{"type":"string","maxLength":200}},{"name":"subjectType","in":"query","required":true,"schema":{"type":"string","enum":["generation","dub","review"]}},{"name":"subjectId","in":"query","required":true,"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)$"}}],"security":[{"session":[]},{"apiKey":[]}],"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"items":{"type":"array","items":{"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)$"},"subjectType":{"type":"string","enum":["generation","dub","review"]},"subjectId":{"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)$"},"parentId":{"anyOf":[{"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)$"},{"type":"null"}]},"body":{"type":"string"},"author":{"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)$"},"name":{"type":"string"},"avatarUrl":{"type":["string","null"]}},"required":["id","name","avatarUrl"]},"mentions":{"type":"array","items":{"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)$"}},"timecode":{"type":["number","null"]},"segmentId":{"type":["string","null"]},"resolved":{"type":"boolean"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"},"edited":{"type":"boolean"}},"required":["id","subjectType","subjectId","parentId","body","author","mentions","timecode","segmentId","resolved","createdAt","updatedAt","edited"]}},"nextCursor":{"type":["string","null"]}},"required":["items","nextCursor"]},"example":{"items":[{"id":"01990000-0000-7000-8000-000000000001","subjectType":"generation","subjectId":"01990000-0000-7000-8000-000000000001","parentId":"01990000-0000-7000-8000-000000000001","body":"example","author":{"id":"01990000-0000-7000-8000-000000000001","name":"Noura","avatarUrl":"http://localhost:4000/example"},"mentions":["01990000-0000-7000-8000-000000000001"],"timecode":"example","segmentId":"example","resolved":true,"createdAt":"2026-09-19T12:00:00.000Z","updatedAt":"2026-09-19T12:00:00.000Z","edited":true}],"nextCursor":"example"}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/comments","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/comments","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/comments","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/comments","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/comments","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/comments","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/comments","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/comments","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/comments","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/comments","traceId":"request-id"}}}}}},"post":{"operationId":"createComment","tags":["Reviews"],"summary":"create Comment","description":"Requires workspace role viewer or above. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"X-CSRF-Token","in":"header","required":false,"description":"Required for cookie-authenticated mutations; returned by sign-in/sign-up.","schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"subjectType":{"type":"string","enum":["generation","dub","review"]},"subjectId":{"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)$"},"body":{"type":"string","minLength":1,"maxLength":4000},"parentId":{"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)$"},"mentions":{"description":"Member user ids to notify","maxItems":20,"type":"array","items":{"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)$"}},"timecode":{"type":"number","minimum":0},"segmentId":{"type":"string","maxLength":40}},"required":["subjectType","subjectId","body"]},"example":{"subjectType":"generation","subjectId":"01990000-0000-7000-8000-000000000001","body":"example","parentId":"01990000-0000-7000-8000-000000000001","mentions":["01990000-0000-7000-8000-000000000001"],"timecode":0,"segmentId":"example"}}}},"responses":{"201":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","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)$"},"subjectType":{"type":"string","enum":["generation","dub","review"]},"subjectId":{"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)$"},"parentId":{"anyOf":[{"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)$"},{"type":"null"}]},"body":{"type":"string"},"author":{"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)$"},"name":{"type":"string"},"avatarUrl":{"type":["string","null"]}},"required":["id","name","avatarUrl"]},"mentions":{"type":"array","items":{"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)$"}},"timecode":{"type":["number","null"]},"segmentId":{"type":["string","null"]},"resolved":{"type":"boolean"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"},"edited":{"type":"boolean"}},"required":["id","subjectType","subjectId","parentId","body","author","mentions","timecode","segmentId","resolved","createdAt","updatedAt","edited"]},"example":{"id":"01990000-0000-7000-8000-000000000001","subjectType":"generation","subjectId":"01990000-0000-7000-8000-000000000001","parentId":"01990000-0000-7000-8000-000000000001","body":"example","author":{"id":"01990000-0000-7000-8000-000000000001","name":"Noura","avatarUrl":"http://localhost:4000/example"},"mentions":["01990000-0000-7000-8000-000000000001"],"timecode":"example","segmentId":"example","resolved":true,"createdAt":"2026-09-19T12:00:00.000Z","updatedAt":"2026-09-19T12:00:00.000Z","edited":true}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/comments","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/comments","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/comments","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/comments","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/comments","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/comments","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/comments","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/comments","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/comments","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/comments","traceId":"request-id"}}}}}}},"/v1/comments/{id}":{"patch":{"operationId":"updateComment","tags":["Reviews"],"summary":"Edit your comment, or resolve a thread (author or admin)","description":"Requires workspace role viewer or above. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"X-CSRF-Token","in":"header","required":false,"description":"Required for cookie-authenticated mutations; returned by sign-in/sign-up.","schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"body":{"type":"string","minLength":1,"maxLength":4000},"resolved":{"type":"boolean"}}},"example":{"body":"example","resolved":true}}}},"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","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)$"},"subjectType":{"type":"string","enum":["generation","dub","review"]},"subjectId":{"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)$"},"parentId":{"anyOf":[{"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)$"},{"type":"null"}]},"body":{"type":"string"},"author":{"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)$"},"name":{"type":"string"},"avatarUrl":{"type":["string","null"]}},"required":["id","name","avatarUrl"]},"mentions":{"type":"array","items":{"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)$"}},"timecode":{"type":["number","null"]},"segmentId":{"type":["string","null"]},"resolved":{"type":"boolean"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"},"edited":{"type":"boolean"}},"required":["id","subjectType","subjectId","parentId","body","author","mentions","timecode","segmentId","resolved","createdAt","updatedAt","edited"]},"example":{"id":"01990000-0000-7000-8000-000000000001","subjectType":"generation","subjectId":"01990000-0000-7000-8000-000000000001","parentId":"01990000-0000-7000-8000-000000000001","body":"example","author":{"id":"01990000-0000-7000-8000-000000000001","name":"Noura","avatarUrl":"http://localhost:4000/example"},"mentions":["01990000-0000-7000-8000-000000000001"],"timecode":"example","segmentId":"example","resolved":true,"createdAt":"2026-09-19T12:00:00.000Z","updatedAt":"2026-09-19T12:00:00.000Z","edited":true}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/comments/{id}","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/comments/{id}","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/comments/{id}","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/comments/{id}","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/comments/{id}","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/comments/{id}","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/comments/{id}","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/comments/{id}","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/comments/{id}","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/comments/{id}","traceId":"request-id"}}}}}},"delete":{"operationId":"deleteComment","tags":["Reviews"],"summary":"Delete your comment (or any, as an admin)","description":"Requires workspace role viewer or above. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"X-CSRF-Token","in":"header","required":false,"description":"Required for cookie-authenticated mutations; returned by sign-in/sign-up.","schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"ok":{"type":"boolean"}},"required":["ok"]},"example":{"ok":true}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/comments/{id}","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/comments/{id}","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/comments/{id}","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/comments/{id}","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/comments/{id}","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/comments/{id}","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/comments/{id}","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/comments/{id}","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/comments/{id}","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/comments/{id}","traceId":"request-id"}}}}}}},"/v1/api-keys":{"post":{"operationId":"createApiKey","tags":["Settings: API"],"summary":"create Api Key","description":"Requires workspace role admin or above. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"X-CSRF-Token","in":"header","required":false,"description":"Required for cookie-authenticated mutations; returned by sign-in/sign-up.","schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":100},"scopes":{"minItems":1,"type":"array","items":{"type":"string","enum":["generations:read","generations:write","voices:read","uploads:write"]}}},"required":["name","scopes"]},"example":{"name":"Noura","scopes":["generations:read"]}}}},"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","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)$"},"key":{"type":"string"},"scopes":{"type":"array","items":{"type":"string"}}},"required":["id","key","scopes"]},"example":{"id":"01990000-0000-7000-8000-000000000001","key":"example","scopes":["example"]}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/api-keys","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/api-keys","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/api-keys","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/api-keys","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/api-keys","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/api-keys","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/api-keys","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/api-keys","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/api-keys","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/api-keys","traceId":"request-id"}}}}}},"get":{"operationId":"listApiKeys","tags":["Settings: API"],"summary":"list Api Keys","description":"Requires workspace role admin or above. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"cursor","in":"query","required":false,"schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"schema":{"default":25,"type":"integer","minimum":1,"maximum":100}},{"name":"q","in":"query","required":false,"schema":{"type":"string","maxLength":200}}],"security":[{"session":[]},{"apiKey":[]}],"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"items":{"type":"array","items":{"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)$"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"},"data":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}}},"required":["id","createdAt","updatedAt"],"additionalProperties":{}}},"nextCursor":{"type":["string","null"]}},"required":["items","nextCursor"]},"example":{"items":[{"id":"01990000-0000-7000-8000-000000000001","createdAt":"2026-09-19T12:00:00.000Z","updatedAt":"2026-09-19T12:00:00.000Z","data":{}}],"nextCursor":"example"}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/api-keys","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/api-keys","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/api-keys","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/api-keys","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/api-keys","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/api-keys","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/api-keys","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/api-keys","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/api-keys","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/api-keys","traceId":"request-id"}}}}}}},"/v1/api-keys/{id}":{"delete":{"operationId":"revokeApiKey","tags":["Settings: API"],"summary":"revoke Api Key","description":"Requires workspace role admin or above. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"X-CSRF-Token","in":"header","required":false,"description":"Required for cookie-authenticated mutations; returned by sign-in/sign-up.","schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"ok":{"type":"boolean"}},"required":["ok"]},"example":{"ok":true}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/api-keys/{id}","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/api-keys/{id}","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/api-keys/{id}","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/api-keys/{id}","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/api-keys/{id}","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/api-keys/{id}","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/api-keys/{id}","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/api-keys/{id}","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/api-keys/{id}","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/api-keys/{id}","traceId":"request-id"}}}}}}},"/v1/affiliates":{"get":{"operationId":"getAffiliate","tags":["Settings: Affiliate"],"summary":"get Affiliate","description":"Acts on the signed-in user (no workspace role). Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false}],"security":[{"session":[]},{"apiKey":[]}],"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","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)$"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"},"data":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}}},"required":["id","createdAt","updatedAt"],"additionalProperties":{}},"example":{"id":"01990000-0000-7000-8000-000000000001","createdAt":"2026-09-19T12:00:00.000Z","updatedAt":"2026-09-19T12:00:00.000Z","data":{}}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/affiliates","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/affiliates","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/affiliates","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/affiliates","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/affiliates","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/affiliates","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/affiliates","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/affiliates","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/affiliates","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/affiliates","traceId":"request-id"}}}}}},"post":{"operationId":"applyAffiliate","tags":["Settings: Affiliate"],"summary":"apply Affiliate","description":"Acts on the signed-in user (no workspace role). Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"X-CSRF-Token","in":"header","required":false,"description":"Required for cookie-authenticated mutations; returned by sign-in/sign-up.","schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"method":{"type":"string","enum":["paypal","bank"]},"paypalEmail":{"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,}$"},"iban":{"type":"string","maxLength":34}},"required":["method"]},"example":{"method":"paypal","paypalEmail":"demo@vocla.ai","iban":"example"}}}},"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","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)$"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"},"data":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}}},"required":["id","createdAt","updatedAt"],"additionalProperties":{}},"example":{"id":"01990000-0000-7000-8000-000000000001","createdAt":"2026-09-19T12:00:00.000Z","updatedAt":"2026-09-19T12:00:00.000Z","data":{}}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/affiliates","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/affiliates","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/affiliates","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/affiliates","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/affiliates","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/affiliates","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/affiliates","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/affiliates","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/affiliates","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/affiliates","traceId":"request-id"}}}}}}},"/v1/affiliates/payout-method":{"patch":{"operationId":"updatePayoutMethod","tags":["Settings: Affiliate"],"summary":"update Payout Method","description":"Acts on the signed-in user (no workspace role). Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"X-CSRF-Token","in":"header","required":false,"description":"Required for cookie-authenticated mutations; returned by sign-in/sign-up.","schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"method":{"type":"string","enum":["paypal","bank"]},"paypalEmail":{"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,}$"},"iban":{"type":"string","pattern":"^[A-Z]{2}[0-9]{2}[A-Z0-9]{11,30}$"}},"required":["method"]},"example":{"method":"paypal","paypalEmail":"demo@vocla.ai","iban":"example"}}}},"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","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)$"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"},"data":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}}},"required":["id","createdAt","updatedAt"],"additionalProperties":{}},"example":{"id":"01990000-0000-7000-8000-000000000001","createdAt":"2026-09-19T12:00:00.000Z","updatedAt":"2026-09-19T12:00:00.000Z","data":{}}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/affiliates/payout-method","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/affiliates/payout-method","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/affiliates/payout-method","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/affiliates/payout-method","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/affiliates/payout-method","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/affiliates/payout-method","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/affiliates/payout-method","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/affiliates/payout-method","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/affiliates/payout-method","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/affiliates/payout-method","traceId":"request-id"}}}}}}},"/v1/affiliates/stats":{"get":{"operationId":"getAffiliateStats","tags":["Settings: Affiliate"],"summary":"get Affiliate Stats","description":"Acts on the signed-in user (no workspace role). Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false}],"security":[{"session":[]},{"apiKey":[]}],"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","propertyNames":{"type":"string"},"additionalProperties":{}},"example":{}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/affiliates/stats","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/affiliates/stats","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/affiliates/stats","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/affiliates/stats","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/affiliates/stats","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/affiliates/stats","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/affiliates/stats","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/affiliates/stats","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/affiliates/stats","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/affiliates/stats","traceId":"request-id"}}}}}}},"/v1/affiliates/payouts":{"get":{"operationId":"listAffiliatePayouts","tags":["Settings: Affiliate"],"summary":"list Affiliate Payouts","description":"Acts on the signed-in user (no workspace role). Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"cursor","in":"query","required":false,"schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"schema":{"default":25,"type":"integer","minimum":1,"maximum":100}},{"name":"q","in":"query","required":false,"schema":{"type":"string","maxLength":200}}],"security":[{"session":[]},{"apiKey":[]}],"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"items":{"type":"array","items":{"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)$"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"},"data":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}}},"required":["id","createdAt","updatedAt"],"additionalProperties":{}}},"nextCursor":{"type":["string","null"]}},"required":["items","nextCursor"]},"example":{"items":[{"id":"01990000-0000-7000-8000-000000000001","createdAt":"2026-09-19T12:00:00.000Z","updatedAt":"2026-09-19T12:00:00.000Z","data":{}}],"nextCursor":"example"}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/affiliates/payouts","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/affiliates/payouts","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/affiliates/payouts","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/affiliates/payouts","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/affiliates/payouts","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/affiliates/payouts","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/affiliates/payouts","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/affiliates/payouts","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/affiliates/payouts","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/affiliates/payouts","traceId":"request-id"}}}}}}},"/v1/public/referrals/{code}":{"get":{"operationId":"trackReferral","tags":["Settings: Affiliate"],"summary":"track Referral","description":"Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"code","in":"path","required":true,"schema":{"type":"string"}}],"security":[],"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"ok":{"type":"boolean"}},"required":["ok"]},"example":{"ok":true}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/public/referrals/{code}","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/public/referrals/{code}","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/public/referrals/{code}","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/public/referrals/{code}","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/public/referrals/{code}","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/public/referrals/{code}","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/public/referrals/{code}","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/public/referrals/{code}","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/public/referrals/{code}","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/public/referrals/{code}","traceId":"request-id"}}}}}}},"/v1/admin/voices/clones":{"post":{"operationId":"adminCreateVoiceClone","tags":["Admin"],"summary":"admin Create Voice Clone","description":"Requires admin permission voices.write. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"X-CSRF-Token","in":"header","required":false,"description":"Required for cookie-authenticated mutations; returned by sign-in/sign-up.","schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":80},"description":{"type":"string","maxLength":500},"dialect":{"type":"string","minLength":1,"maxLength":20},"gender":{"type":"string","enum":["male","female","neutral"]},"age":{"type":"string","minLength":1,"maxLength":50},"category":{"type":"string","minLength":1,"maxLength":100},"uploadIds":{"minItems":1,"maxItems":20,"type":"array","items":{"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)$"}},"consent":{"type":"object","properties":{"basis":{"type":"string","enum":["self","permission"],"description":"self = the user’s own voice; permission = someone who gave written permission"},"speakerName":{"description":"Required when basis is permission","type":"string","maxLength":120},"confirmed":{"type":"boolean","const":true},"notPublicFigure":{"type":"boolean","const":true},"policyVersion":{"type":"string","minLength":1,"maxLength":20}},"required":["basis","confirmed","notPublicFigure","policyVersion"]},"isPublic":{"default":true,"type":"boolean"}},"required":["name","dialect","uploadIds"]},"example":{"name":"Noura","description":"example","dialect":"ar-SA","gender":"male","age":"example","category":"example","uploadIds":["01990000-0000-7000-8000-000000000001"],"consent":{"basis":"self","speakerName":"example","confirmed":true,"notPublicFigure":true,"policyVersion":"example"},"isPublic":true}}}},"responses":{"201":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","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)$"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"},"data":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}}},"required":["id","createdAt","updatedAt"],"additionalProperties":{}},"example":{"id":"01990000-0000-7000-8000-000000000001","createdAt":"2026-09-19T12:00:00.000Z","updatedAt":"2026-09-19T12:00:00.000Z","data":{}}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/voices/clones","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/voices/clones","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/voices/clones","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/voices/clones","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/voices/clones","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/voices/clones","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/voices/clones","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/voices/clones","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/voices/clones","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/voices/clones","traceId":"request-id"}}}}}}},"/v1/admin/voices/{id}/clone/retry":{"post":{"operationId":"adminRetryVoiceClone","tags":["Admin"],"summary":"admin Retry Voice Clone","description":"Requires admin permission voices.write. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"X-CSRF-Token","in":"header","required":false,"description":"Required for cookie-authenticated mutations; returned by sign-in/sign-up.","schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"ok":{"type":"boolean"}},"required":["ok"]},"example":{"ok":true}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/voices/{id}/clone/retry","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/voices/{id}/clone/retry","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/voices/{id}/clone/retry","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/voices/{id}/clone/retry","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/voices/{id}/clone/retry","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/voices/{id}/clone/retry","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/voices/{id}/clone/retry","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/voices/{id}/clone/retry","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/voices/{id}/clone/retry","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/voices/{id}/clone/retry","traceId":"request-id"}}}}}}},"/v1/admin/landing/voices":{"get":{"operationId":"adminGetLandingVoices","tags":["Admin"],"summary":"admin Get Landing Voices","description":"Requires admin permission voices.read. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false}],"security":[{"session":[]},{"apiKey":[]}],"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"tryMe":{"maxItems":6,"type":"array","items":{"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)$"}},"dialects":{"default":{},"type":"object","propertyNames":{"type":"string","enum":["saudi","emirati","egyptian","msa","kuwaiti","levantine","maghrebi","sudanese"]},"additionalProperties":{"anyOf":[{"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)$"},{"type":"null"}]}},"updatedAt":{"type":["string","null"]},"defaultTryMe":{"type":"array","items":{"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)$"}}},"required":["tryMe","updatedAt","defaultTryMe"]},"example":{"tryMe":["01990000-0000-7000-8000-000000000001"],"dialects":{},"updatedAt":"2026-09-19T12:00:00.000Z","defaultTryMe":["01990000-0000-7000-8000-000000000001"]}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/landing/voices","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/landing/voices","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/landing/voices","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/landing/voices","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/landing/voices","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/landing/voices","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/landing/voices","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/landing/voices","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/landing/voices","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/landing/voices","traceId":"request-id"}}}}}},"put":{"operationId":"adminUpdateLandingVoices","tags":["Admin"],"summary":"admin Update Landing Voices","description":"Requires admin permission voices.write. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"X-CSRF-Token","in":"header","required":false,"description":"Required for cookie-authenticated mutations; returned by sign-in/sign-up.","schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"tryMe":{"maxItems":6,"type":"array","items":{"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)$"}},"dialects":{"default":{},"type":"object","propertyNames":{"type":"string","enum":["saudi","emirati","egyptian","msa","kuwaiti","levantine","maghrebi","sudanese"]},"additionalProperties":{"anyOf":[{"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)$"},{"type":"null"}]}}},"required":["tryMe"]},"example":{"tryMe":["01990000-0000-7000-8000-000000000001"],"dialects":{}}}}},"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"tryMe":{"maxItems":6,"type":"array","items":{"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)$"}},"dialects":{"default":{},"type":"object","propertyNames":{"type":"string","enum":["saudi","emirati","egyptian","msa","kuwaiti","levantine","maghrebi","sudanese"]},"additionalProperties":{"anyOf":[{"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)$"},{"type":"null"}]}},"updatedAt":{"type":["string","null"]},"defaultTryMe":{"type":"array","items":{"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)$"}}},"required":["tryMe","updatedAt","defaultTryMe"]},"example":{"tryMe":["01990000-0000-7000-8000-000000000001"],"dialects":{},"updatedAt":"2026-09-19T12:00:00.000Z","defaultTryMe":["01990000-0000-7000-8000-000000000001"]}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/landing/voices","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/landing/voices","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/landing/voices","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/landing/voices","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/landing/voices","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/landing/voices","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/landing/voices","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/landing/voices","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/landing/voices","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/landing/voices","traceId":"request-id"}}}}}}},"/v1/admin/landing/videos":{"get":{"operationId":"adminGetLandingVideos","tags":["Admin"],"summary":"Landing showcase video slots (manifest defaults merged with overrides) and the ready video projects that can be published","description":"Requires admin permission content.read. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false}],"security":[{"session":[]},{"apiKey":[]}],"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"slots":{"type":"array","items":{"type":"object","properties":{"slot":{"type":"string"},"aspect":{"type":"string","enum":["9:16","16:9","1:1"]},"source":{"type":"string","enum":["default","project","upload"]},"hidden":{"type":"boolean"},"known":{"type":"boolean","description":"One of the slots the landing uses"},"defaults":{"anyOf":[{"type":"object","properties":{"aspect":{"type":"string","enum":["9:16","16:9","1:1"]},"dialect":{"type":"string","maxLength":20},"default":{"description":"Default variant dialect (dialects slot)","type":"string","maxLength":20},"title":{"type":"object","properties":{"ar":{"type":"string","maxLength":400},"en":{"type":"string","maxLength":400}}},"caption":{"type":"object","properties":{"ar":{"type":"string","maxLength":400},"en":{"type":"string","maxLength":400}}},"durationSeconds":{"type":"number","exclusiveMinimum":0,"maximum":600},"poster":{"type":"string","minLength":1,"maxLength":400,"pattern":"^landing\\/videos\\/[A-Za-z0-9._/-]+$"},"sources":{"maxItems":4,"type":"array","items":{"type":"object","properties":{"key":{"type":"string","minLength":1,"maxLength":400,"pattern":"^landing\\/videos\\/[A-Za-z0-9._/-]+$"},"type":{"type":"string","enum":["video/webm","video/mp4"]}},"required":["key","type"]}},"stills":{"maxItems":12,"type":"array","items":{"type":"string","minLength":1,"maxLength":400,"pattern":"^landing\\/videos\\/[A-Za-z0-9._/-]+$"}},"tier":{"type":"string","maxLength":100},"script":{"type":"object","properties":{"ar":{"type":"string","maxLength":400},"en":{"type":"string","maxLength":400}}},"projectId":{"type":"string","maxLength":64},"before":{"description":"Product photo (product slot: before/after)","type":"string","minLength":1,"maxLength":400,"pattern":"^landing\\/videos\\/[A-Za-z0-9._/-]+$"},"variants":{"maxItems":12,"type":"array","items":{"type":"object","properties":{"dialect":{"type":"string","minLength":1,"maxLength":20},"label":{"type":"object","properties":{"ar":{"type":"string","maxLength":400},"en":{"type":"string","maxLength":400}}},"sources":{"default":[],"maxItems":4,"type":"array","items":{"type":"object","properties":{"key":{"type":"string","minLength":1,"maxLength":400,"pattern":"^landing\\/videos\\/[A-Za-z0-9._/-]+$"},"type":{"type":"string","enum":["video/webm","video/mp4"]}},"required":["key","type"]}},"poster":{"type":"string","minLength":1,"maxLength":400,"pattern":"^landing\\/videos\\/[A-Za-z0-9._/-]+$"},"durationSeconds":{"type":"number","exclusiveMinimum":0,"maximum":600},"projectId":{"type":"string","maxLength":64}},"required":["dialect"],"additionalProperties":{}}},"uploadDate":{"type":"string","maxLength":40}},"additionalProperties":{}},{"type":"null"}],"description":"The manifest entry"},"override":{"type":"object","properties":{"hidden":{"type":"boolean"},"title":{"type":"object","properties":{"ar":{"type":"string","maxLength":400},"en":{"type":"string","maxLength":400}}},"caption":{"type":"object","properties":{"ar":{"type":"string","maxLength":400},"en":{"type":"string","maxLength":400}}},"labels":{"description":"Dialect variant labels","type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"object","properties":{"ar":{"type":"string","maxLength":400},"en":{"type":"string","maxLength":400}}}},"order":{"description":"Dialect variant order","maxItems":12,"type":"array","items":{"type":"string","maxLength":20}},"media":{"anyOf":[{"type":"object","properties":{"version":{"type":"string","maxLength":64},"kind":{"type":"string","enum":["project","upload"]},"aspect":{"type":"string","enum":["9:16","16:9","1:1"]},"dialect":{"type":"string","maxLength":20},"durationSeconds":{"type":"number","exclusiveMinimum":0,"maximum":600},"poster":{"type":"string","minLength":1,"maxLength":400,"pattern":"^landing\\/videos\\/[A-Za-z0-9._/-]+$"},"sources":{"maxItems":4,"type":"array","items":{"type":"object","properties":{"key":{"type":"string","minLength":1,"maxLength":400,"pattern":"^landing\\/videos\\/[A-Za-z0-9._/-]+$"},"type":{"type":"string","enum":["video/webm","video/mp4"]}},"required":["key","type"]}},"stills":{"maxItems":12,"type":"array","items":{"type":"string","minLength":1,"maxLength":400,"pattern":"^landing\\/videos\\/[A-Za-z0-9._/-]+$"}},"tier":{"type":"string","maxLength":100},"script":{"type":"object","properties":{"ar":{"type":"string","maxLength":400},"en":{"type":"string","maxLength":400}}},"projectId":{"type":"string","maxLength":64},"uploadDate":{"type":"string","maxLength":40}},"required":["version","kind","sources"]},{"type":"null"}]},"variants":{"description":"Published dialect variants by dialect","type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"object","properties":{"dialect":{"type":"string","minLength":1,"maxLength":20},"label":{"type":"object","properties":{"ar":{"type":"string","maxLength":400},"en":{"type":"string","maxLength":400}}},"sources":{"default":[],"maxItems":4,"type":"array","items":{"type":"object","properties":{"key":{"type":"string","minLength":1,"maxLength":400,"pattern":"^landing\\/videos\\/[A-Za-z0-9._/-]+$"},"type":{"type":"string","enum":["video/webm","video/mp4"]}},"required":["key","type"]}},"poster":{"type":"string","minLength":1,"maxLength":400,"pattern":"^landing\\/videos\\/[A-Za-z0-9._/-]+$"},"durationSeconds":{"type":"number","exclusiveMinimum":0,"maximum":600},"projectId":{"type":"string","maxLength":64},"version":{"type":"string","maxLength":64},"kind":{"type":"string","enum":["project","upload"]}},"required":["dialect","version","kind"],"additionalProperties":{}}},"poster":{"description":"Uploaded poster for the current media","type":"string","minLength":1,"maxLength":400,"pattern":"^landing\\/videos\\/[A-Za-z0-9._/-]+$"},"before":{"description":"Uploaded picture shown beside the video (the photo of a before and after; the reference photo of the video edit how-it-works)","type":"string","minLength":1,"maxLength":400,"pattern":"^landing\\/videos\\/[A-Za-z0-9._/-]+$"},"pending":{"anyOf":[{"type":"object","properties":{"kind":{"type":"string","enum":["project","upload"]},"version":{"type":"string"},"dialect":{"type":["string","null"]},"projectId":{"type":["string","null"]},"startedAt":{"type":"string"},"error":{"type":["string","null"]}},"required":["kind","version","dialect","projectId","startedAt"]},{"type":"null"}]},"updatedAt":{"type":"string"}}},"resolved":{"anyOf":[{"type":"object","properties":{"slot":{"type":"string"},"aspect":{"type":"string","enum":["9:16","16:9","1:1"]},"source":{"type":"string","enum":["default","project","upload"]},"title":{"type":"object","properties":{"ar":{"type":"string"},"en":{"type":"string"}}},"caption":{"type":"object","properties":{"ar":{"type":"string"},"en":{"type":"string"}}},"dialect":{"type":["string","null"]},"durationSeconds":{"type":["number","null"]},"poster":{"description":"Absolute URL","type":["string","null"]},"sources":{"type":"array","items":{"type":"object","properties":{"url":{"type":"string"},"type":{"type":"string","enum":["video/webm","video/mp4"]}},"required":["url","type"]},"description":"WebM first, then MP4; absolute URLs"},"stills":{"type":"array","items":{"type":"string"}},"before":{"type":["string","null"]},"tier":{"type":["string","null"]},"projectId":{"type":["string","null"]},"uploadDate":{"description":"ISO date (VideoObject.uploadDate)","type":["string","null"]},"defaultDialect":{"type":["string","null"]},"variants":{"type":"array","items":{"type":"object","properties":{"dialect":{"type":"string"},"label":{"type":"object","properties":{"ar":{"type":"string"},"en":{"type":"string"}}},"poster":{"type":["string","null"]},"sources":{"type":"array","items":{"type":"object","properties":{"url":{"type":"string"},"type":{"type":"string","enum":["video/webm","video/mp4"]}},"required":["url","type"]}},"durationSeconds":{"type":["number","null"]}},"required":["dialect","label","poster","sources","durationSeconds"]}}},"required":["slot","aspect","source","title","caption","dialect","durationSeconds","poster","sources","stills","before","tier","projectId","uploadDate","defaultDialect","variants"]},{"type":"null"}],"description":"What the landing shows (hidden slots included here for preview)"},"pending":{"anyOf":[{"type":"object","properties":{"kind":{"type":"string","enum":["project","upload"]},"version":{"type":"string"},"dialect":{"type":["string","null"]},"projectId":{"type":["string","null"]},"startedAt":{"type":"string"},"error":{"type":["string","null"]}},"required":["kind","version","dialect","projectId","startedAt"]},{"type":"null"}]},"picture":{"description":"Absolute URL of the uploaded picture (shown with or without a video)","type":["string","null"]},"group":{"description":"Video edit showcase group id (videoEditShowcaseGroups), null for the other slots","type":["string","null"]}},"required":["slot","aspect","source","hidden","known","defaults","override","resolved","pending"]}},"projects":{"type":"array","items":{"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)$"},"title":{"type":"string"},"aspectRatio":{"type":"string","enum":["9:16","16:9","1:1"]},"dialect":{"type":"string"},"tier":{"type":"string"},"duration":{"type":"number"},"thumbnailUrl":{"type":["string","null"]},"videoUrl":{"type":["string","null"]},"storyboard":{"type":"boolean"},"workspaceName":{"type":["string","null"]},"renderedAt":{"type":["string","null"]}},"required":["id","title","aspectRatio","dialect","tier","duration","thumbnailUrl","videoUrl","storyboard","workspaceName","renderedAt"]},"description":"Ready video projects (newest first) that can be published"},"updatedAt":{"type":["string","null"]},"maxUploadBytes":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}},"required":["slots","projects","updatedAt","maxUploadBytes"]},"example":{"slots":[{"slot":"example","aspect":"9:16","source":"default","hidden":true,"known":true,"defaults":{"aspect":"9:16","dialect":"ar-SA","default":"example","title":{"ar":"مثال","en":"example"},"caption":{"ar":"مثال","en":"example"},"durationSeconds":1,"poster":"example","sources":[{"key":"example","type":"video/webm"}],"stills":["example"],"tier":"example","script":{"ar":"مثال","en":"example"},"projectId":"example","before":"example","variants":[{"dialect":"ar-SA","label":{"ar":"مثال","en":"example"},"sources":[],"poster":"example","durationSeconds":1,"projectId":"example"}],"uploadDate":"example"},"override":{"hidden":true,"title":{"ar":"مثال","en":"example"},"caption":{"ar":"مثال","en":"example"},"labels":{},"order":["example"],"media":{"version":"example","kind":"project","aspect":"9:16","dialect":"ar-SA","durationSeconds":1,"poster":"example","sources":[{"key":"example","type":"video/webm"}],"stills":["example"],"tier":"example","script":{"ar":"مثال","en":"example"},"projectId":"example","uploadDate":"example"},"variants":{},"poster":"example","before":"example","pending":{"kind":"project","version":"example","dialect":"ar-SA","projectId":"example","startedAt":"2026-09-19T12:00:00.000Z","error":"example"},"updatedAt":"2026-09-19T12:00:00.000Z"},"resolved":{"slot":"example","aspect":"9:16","source":"default","title":{"ar":"مثال","en":"example"},"caption":{"ar":"مثال","en":"example"},"dialect":"ar-SA","durationSeconds":"example","poster":"example","sources":[{"url":"example","type":"video/webm"}],"stills":["example"],"before":"example","tier":"example","projectId":"example","uploadDate":"example","defaultDialect":"example","variants":[{"dialect":"ar-SA","label":{"ar":"مثال","en":"example"},"poster":"example","sources":[{"url":"example","type":"video/webm"}],"durationSeconds":"example"}]},"pending":{"kind":"project","version":"example","dialect":"ar-SA","projectId":"example","startedAt":"2026-09-19T12:00:00.000Z","error":"example"},"picture":"example","group":"example"}],"projects":[{"id":"01990000-0000-7000-8000-000000000001","title":"example","aspectRatio":"9:16","dialect":"ar-SA","tier":"example","duration":1,"thumbnailUrl":"http://localhost:4000/example","videoUrl":"http://localhost:4000/example","storyboard":true,"workspaceName":"example","renderedAt":"2026-09-19T12:00:00.000Z"}],"updatedAt":"2026-09-19T12:00:00.000Z","maxUploadBytes":-9007199254740991}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/landing/videos","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/landing/videos","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/landing/videos","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/landing/videos","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/landing/videos","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/landing/videos","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/landing/videos","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/landing/videos","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/landing/videos","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/landing/videos","traceId":"request-id"}}}}}}},"/v1/admin/landing/videos/{slot}":{"put":{"operationId":"adminUpdateLandingVideo","tags":["Admin"],"summary":"Edit a slot: title, caption, dialect labels and order, hide it, drop a variant, or reset to the manifest default","description":"Requires admin permission content.write. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"slot","in":"path","required":true,"schema":{"type":"string"}},{"name":"X-CSRF-Token","in":"header","required":false,"description":"Required for cookie-authenticated mutations; returned by sign-in/sign-up.","schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"hidden":{"type":"boolean"},"title":{"type":"object","properties":{"ar":{"type":"string","maxLength":400},"en":{"type":"string","maxLength":400}}},"caption":{"type":"object","properties":{"ar":{"type":"string","maxLength":400},"en":{"type":"string","maxLength":400}}},"labels":{"type":"object","propertyNames":{"type":"string","maxLength":20},"additionalProperties":{"type":"object","properties":{"ar":{"type":"string","maxLength":400},"en":{"type":"string","maxLength":400}}}},"order":{"maxItems":12,"type":"array","items":{"type":"string","maxLength":20}},"removePicture":{"description":"Drop the uploaded picture","type":"boolean"},"reset":{"description":"Drop the published media (and variants) and go back to the manifest default","type":"boolean"},"removeVariant":{"description":"Drop one published dialect variant","type":"string","maxLength":20}}},"example":{"hidden":true,"title":{"ar":"مثال","en":"example"},"caption":{"ar":"مثال","en":"example"},"labels":{},"order":["example"],"removePicture":true,"reset":true,"removeVariant":"example"}}}},"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"slot":{"type":"string"},"aspect":{"type":"string","enum":["9:16","16:9","1:1"]},"source":{"type":"string","enum":["default","project","upload"]},"hidden":{"type":"boolean"},"known":{"type":"boolean","description":"One of the slots the landing uses"},"defaults":{"anyOf":[{"type":"object","properties":{"aspect":{"type":"string","enum":["9:16","16:9","1:1"]},"dialect":{"type":"string","maxLength":20},"default":{"description":"Default variant dialect (dialects slot)","type":"string","maxLength":20},"title":{"type":"object","properties":{"ar":{"type":"string","maxLength":400},"en":{"type":"string","maxLength":400}}},"caption":{"type":"object","properties":{"ar":{"type":"string","maxLength":400},"en":{"type":"string","maxLength":400}}},"durationSeconds":{"type":"number","exclusiveMinimum":0,"maximum":600},"poster":{"type":"string","minLength":1,"maxLength":400,"pattern":"^landing\\/videos\\/[A-Za-z0-9._/-]+$"},"sources":{"maxItems":4,"type":"array","items":{"type":"object","properties":{"key":{"type":"string","minLength":1,"maxLength":400,"pattern":"^landing\\/videos\\/[A-Za-z0-9._/-]+$"},"type":{"type":"string","enum":["video/webm","video/mp4"]}},"required":["key","type"]}},"stills":{"maxItems":12,"type":"array","items":{"type":"string","minLength":1,"maxLength":400,"pattern":"^landing\\/videos\\/[A-Za-z0-9._/-]+$"}},"tier":{"type":"string","maxLength":100},"script":{"type":"object","properties":{"ar":{"type":"string","maxLength":400},"en":{"type":"string","maxLength":400}}},"projectId":{"type":"string","maxLength":64},"before":{"description":"Product photo (product slot: before/after)","type":"string","minLength":1,"maxLength":400,"pattern":"^landing\\/videos\\/[A-Za-z0-9._/-]+$"},"variants":{"maxItems":12,"type":"array","items":{"type":"object","properties":{"dialect":{"type":"string","minLength":1,"maxLength":20},"label":{"type":"object","properties":{"ar":{"type":"string","maxLength":400},"en":{"type":"string","maxLength":400}}},"sources":{"default":[],"maxItems":4,"type":"array","items":{"type":"object","properties":{"key":{"type":"string","minLength":1,"maxLength":400,"pattern":"^landing\\/videos\\/[A-Za-z0-9._/-]+$"},"type":{"type":"string","enum":["video/webm","video/mp4"]}},"required":["key","type"]}},"poster":{"type":"string","minLength":1,"maxLength":400,"pattern":"^landing\\/videos\\/[A-Za-z0-9._/-]+$"},"durationSeconds":{"type":"number","exclusiveMinimum":0,"maximum":600},"projectId":{"type":"string","maxLength":64}},"required":["dialect"],"additionalProperties":{}}},"uploadDate":{"type":"string","maxLength":40}},"additionalProperties":{}},{"type":"null"}],"description":"The manifest entry"},"override":{"type":"object","properties":{"hidden":{"type":"boolean"},"title":{"type":"object","properties":{"ar":{"type":"string","maxLength":400},"en":{"type":"string","maxLength":400}}},"caption":{"type":"object","properties":{"ar":{"type":"string","maxLength":400},"en":{"type":"string","maxLength":400}}},"labels":{"description":"Dialect variant labels","type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"object","properties":{"ar":{"type":"string","maxLength":400},"en":{"type":"string","maxLength":400}}}},"order":{"description":"Dialect variant order","maxItems":12,"type":"array","items":{"type":"string","maxLength":20}},"media":{"anyOf":[{"type":"object","properties":{"version":{"type":"string","maxLength":64},"kind":{"type":"string","enum":["project","upload"]},"aspect":{"type":"string","enum":["9:16","16:9","1:1"]},"dialect":{"type":"string","maxLength":20},"durationSeconds":{"type":"number","exclusiveMinimum":0,"maximum":600},"poster":{"type":"string","minLength":1,"maxLength":400,"pattern":"^landing\\/videos\\/[A-Za-z0-9._/-]+$"},"sources":{"maxItems":4,"type":"array","items":{"type":"object","properties":{"key":{"type":"string","minLength":1,"maxLength":400,"pattern":"^landing\\/videos\\/[A-Za-z0-9._/-]+$"},"type":{"type":"string","enum":["video/webm","video/mp4"]}},"required":["key","type"]}},"stills":{"maxItems":12,"type":"array","items":{"type":"string","minLength":1,"maxLength":400,"pattern":"^landing\\/videos\\/[A-Za-z0-9._/-]+$"}},"tier":{"type":"string","maxLength":100},"script":{"type":"object","properties":{"ar":{"type":"string","maxLength":400},"en":{"type":"string","maxLength":400}}},"projectId":{"type":"string","maxLength":64},"uploadDate":{"type":"string","maxLength":40}},"required":["version","kind","sources"]},{"type":"null"}]},"variants":{"description":"Published dialect variants by dialect","type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"object","properties":{"dialect":{"type":"string","minLength":1,"maxLength":20},"label":{"type":"object","properties":{"ar":{"type":"string","maxLength":400},"en":{"type":"string","maxLength":400}}},"sources":{"default":[],"maxItems":4,"type":"array","items":{"type":"object","properties":{"key":{"type":"string","minLength":1,"maxLength":400,"pattern":"^landing\\/videos\\/[A-Za-z0-9._/-]+$"},"type":{"type":"string","enum":["video/webm","video/mp4"]}},"required":["key","type"]}},"poster":{"type":"string","minLength":1,"maxLength":400,"pattern":"^landing\\/videos\\/[A-Za-z0-9._/-]+$"},"durationSeconds":{"type":"number","exclusiveMinimum":0,"maximum":600},"projectId":{"type":"string","maxLength":64},"version":{"type":"string","maxLength":64},"kind":{"type":"string","enum":["project","upload"]}},"required":["dialect","version","kind"],"additionalProperties":{}}},"poster":{"description":"Uploaded poster for the current media","type":"string","minLength":1,"maxLength":400,"pattern":"^landing\\/videos\\/[A-Za-z0-9._/-]+$"},"before":{"description":"Uploaded picture shown beside the video (the photo of a before and after; the reference photo of the video edit how-it-works)","type":"string","minLength":1,"maxLength":400,"pattern":"^landing\\/videos\\/[A-Za-z0-9._/-]+$"},"pending":{"anyOf":[{"type":"object","properties":{"kind":{"type":"string","enum":["project","upload"]},"version":{"type":"string"},"dialect":{"type":["string","null"]},"projectId":{"type":["string","null"]},"startedAt":{"type":"string"},"error":{"type":["string","null"]}},"required":["kind","version","dialect","projectId","startedAt"]},{"type":"null"}]},"updatedAt":{"type":"string"}}},"resolved":{"anyOf":[{"type":"object","properties":{"slot":{"type":"string"},"aspect":{"type":"string","enum":["9:16","16:9","1:1"]},"source":{"type":"string","enum":["default","project","upload"]},"title":{"type":"object","properties":{"ar":{"type":"string"},"en":{"type":"string"}}},"caption":{"type":"object","properties":{"ar":{"type":"string"},"en":{"type":"string"}}},"dialect":{"type":["string","null"]},"durationSeconds":{"type":["number","null"]},"poster":{"description":"Absolute URL","type":["string","null"]},"sources":{"type":"array","items":{"type":"object","properties":{"url":{"type":"string"},"type":{"type":"string","enum":["video/webm","video/mp4"]}},"required":["url","type"]},"description":"WebM first, then MP4; absolute URLs"},"stills":{"type":"array","items":{"type":"string"}},"before":{"type":["string","null"]},"tier":{"type":["string","null"]},"projectId":{"type":["string","null"]},"uploadDate":{"description":"ISO date (VideoObject.uploadDate)","type":["string","null"]},"defaultDialect":{"type":["string","null"]},"variants":{"type":"array","items":{"type":"object","properties":{"dialect":{"type":"string"},"label":{"type":"object","properties":{"ar":{"type":"string"},"en":{"type":"string"}}},"poster":{"type":["string","null"]},"sources":{"type":"array","items":{"type":"object","properties":{"url":{"type":"string"},"type":{"type":"string","enum":["video/webm","video/mp4"]}},"required":["url","type"]}},"durationSeconds":{"type":["number","null"]}},"required":["dialect","label","poster","sources","durationSeconds"]}}},"required":["slot","aspect","source","title","caption","dialect","durationSeconds","poster","sources","stills","before","tier","projectId","uploadDate","defaultDialect","variants"]},{"type":"null"}],"description":"What the landing shows (hidden slots included here for preview)"},"pending":{"anyOf":[{"type":"object","properties":{"kind":{"type":"string","enum":["project","upload"]},"version":{"type":"string"},"dialect":{"type":["string","null"]},"projectId":{"type":["string","null"]},"startedAt":{"type":"string"},"error":{"type":["string","null"]}},"required":["kind","version","dialect","projectId","startedAt"]},{"type":"null"}]},"picture":{"description":"Absolute URL of the uploaded picture (shown with or without a video)","type":["string","null"]},"group":{"description":"Video edit showcase group id (videoEditShowcaseGroups), null for the other slots","type":["string","null"]}},"required":["slot","aspect","source","hidden","known","defaults","override","resolved","pending"]},"example":{"slot":"example","aspect":"9:16","source":"default","hidden":true,"known":true,"defaults":{"aspect":"9:16","dialect":"ar-SA","default":"example","title":{"ar":"مثال","en":"example"},"caption":{"ar":"مثال","en":"example"},"durationSeconds":1,"poster":"example","sources":[{"key":"example","type":"video/webm"}],"stills":["example"],"tier":"example","script":{"ar":"مثال","en":"example"},"projectId":"example","before":"example","variants":[{"dialect":"ar-SA","label":{"ar":"مثال","en":"example"},"sources":[],"poster":"example","durationSeconds":1,"projectId":"example"}],"uploadDate":"example"},"override":{"hidden":true,"title":{"ar":"مثال","en":"example"},"caption":{"ar":"مثال","en":"example"},"labels":{},"order":["example"],"media":{"version":"example","kind":"project","aspect":"9:16","dialect":"ar-SA","durationSeconds":1,"poster":"example","sources":[{"key":"example","type":"video/webm"}],"stills":["example"],"tier":"example","script":{"ar":"مثال","en":"example"},"projectId":"example","uploadDate":"example"},"variants":{},"poster":"example","before":"example","pending":{"kind":"project","version":"example","dialect":"ar-SA","projectId":"example","startedAt":"2026-09-19T12:00:00.000Z","error":"example"},"updatedAt":"2026-09-19T12:00:00.000Z"},"resolved":{"slot":"example","aspect":"9:16","source":"default","title":{"ar":"مثال","en":"example"},"caption":{"ar":"مثال","en":"example"},"dialect":"ar-SA","durationSeconds":"example","poster":"example","sources":[{"url":"example","type":"video/webm"}],"stills":["example"],"before":"example","tier":"example","projectId":"example","uploadDate":"example","defaultDialect":"example","variants":[{"dialect":"ar-SA","label":{"ar":"مثال","en":"example"},"poster":"example","sources":[{"url":"example","type":"video/webm"}],"durationSeconds":"example"}]},"pending":{"kind":"project","version":"example","dialect":"ar-SA","projectId":"example","startedAt":"2026-09-19T12:00:00.000Z","error":"example"},"picture":"example","group":"example"}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/landing/videos/{slot}","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/landing/videos/{slot}","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/landing/videos/{slot}","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/landing/videos/{slot}","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/landing/videos/{slot}","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/landing/videos/{slot}","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/landing/videos/{slot}","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/landing/videos/{slot}","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/landing/videos/{slot}","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/landing/videos/{slot}","traceId":"request-id"}}}}}}},"/v1/admin/landing/videos/{slot}/publish":{"post":{"operationId":"adminPublishLandingVideo","tags":["Admin"],"summary":"Copy a ready project's final MP4 to landing/videos/{slot}/{version}/ and queue the media worker for WebM, poster and stills; the slot switches when they are ready","description":"Requires admin permission content.write. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"slot","in":"path","required":true,"schema":{"type":"string"}},{"name":"X-CSRF-Token","in":"header","required":false,"description":"Required for cookie-authenticated mutations; returned by sign-in/sign-up.","schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"projectId":{"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)$"},"variantDialect":{"description":"Publish as this dialect variant (dialects slot)","type":"string","minLength":2,"maxLength":20}},"required":["projectId"]},"example":{"projectId":"01990000-0000-7000-8000-000000000001","variantDialect":"example"}}}},"responses":{"202":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"slot":{"type":"string"},"aspect":{"type":"string","enum":["9:16","16:9","1:1"]},"source":{"type":"string","enum":["default","project","upload"]},"hidden":{"type":"boolean"},"known":{"type":"boolean","description":"One of the slots the landing uses"},"defaults":{"anyOf":[{"type":"object","properties":{"aspect":{"type":"string","enum":["9:16","16:9","1:1"]},"dialect":{"type":"string","maxLength":20},"default":{"description":"Default variant dialect (dialects slot)","type":"string","maxLength":20},"title":{"type":"object","properties":{"ar":{"type":"string","maxLength":400},"en":{"type":"string","maxLength":400}}},"caption":{"type":"object","properties":{"ar":{"type":"string","maxLength":400},"en":{"type":"string","maxLength":400}}},"durationSeconds":{"type":"number","exclusiveMinimum":0,"maximum":600},"poster":{"type":"string","minLength":1,"maxLength":400,"pattern":"^landing\\/videos\\/[A-Za-z0-9._/-]+$"},"sources":{"maxItems":4,"type":"array","items":{"type":"object","properties":{"key":{"type":"string","minLength":1,"maxLength":400,"pattern":"^landing\\/videos\\/[A-Za-z0-9._/-]+$"},"type":{"type":"string","enum":["video/webm","video/mp4"]}},"required":["key","type"]}},"stills":{"maxItems":12,"type":"array","items":{"type":"string","minLength":1,"maxLength":400,"pattern":"^landing\\/videos\\/[A-Za-z0-9._/-]+$"}},"tier":{"type":"string","maxLength":100},"script":{"type":"object","properties":{"ar":{"type":"string","maxLength":400},"en":{"type":"string","maxLength":400}}},"projectId":{"type":"string","maxLength":64},"before":{"description":"Product photo (product slot: before/after)","type":"string","minLength":1,"maxLength":400,"pattern":"^landing\\/videos\\/[A-Za-z0-9._/-]+$"},"variants":{"maxItems":12,"type":"array","items":{"type":"object","properties":{"dialect":{"type":"string","minLength":1,"maxLength":20},"label":{"type":"object","properties":{"ar":{"type":"string","maxLength":400},"en":{"type":"string","maxLength":400}}},"sources":{"default":[],"maxItems":4,"type":"array","items":{"type":"object","properties":{"key":{"type":"string","minLength":1,"maxLength":400,"pattern":"^landing\\/videos\\/[A-Za-z0-9._/-]+$"},"type":{"type":"string","enum":["video/webm","video/mp4"]}},"required":["key","type"]}},"poster":{"type":"string","minLength":1,"maxLength":400,"pattern":"^landing\\/videos\\/[A-Za-z0-9._/-]+$"},"durationSeconds":{"type":"number","exclusiveMinimum":0,"maximum":600},"projectId":{"type":"string","maxLength":64}},"required":["dialect"],"additionalProperties":{}}},"uploadDate":{"type":"string","maxLength":40}},"additionalProperties":{}},{"type":"null"}],"description":"The manifest entry"},"override":{"type":"object","properties":{"hidden":{"type":"boolean"},"title":{"type":"object","properties":{"ar":{"type":"string","maxLength":400},"en":{"type":"string","maxLength":400}}},"caption":{"type":"object","properties":{"ar":{"type":"string","maxLength":400},"en":{"type":"string","maxLength":400}}},"labels":{"description":"Dialect variant labels","type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"object","properties":{"ar":{"type":"string","maxLength":400},"en":{"type":"string","maxLength":400}}}},"order":{"description":"Dialect variant order","maxItems":12,"type":"array","items":{"type":"string","maxLength":20}},"media":{"anyOf":[{"type":"object","properties":{"version":{"type":"string","maxLength":64},"kind":{"type":"string","enum":["project","upload"]},"aspect":{"type":"string","enum":["9:16","16:9","1:1"]},"dialect":{"type":"string","maxLength":20},"durationSeconds":{"type":"number","exclusiveMinimum":0,"maximum":600},"poster":{"type":"string","minLength":1,"maxLength":400,"pattern":"^landing\\/videos\\/[A-Za-z0-9._/-]+$"},"sources":{"maxItems":4,"type":"array","items":{"type":"object","properties":{"key":{"type":"string","minLength":1,"maxLength":400,"pattern":"^landing\\/videos\\/[A-Za-z0-9._/-]+$"},"type":{"type":"string","enum":["video/webm","video/mp4"]}},"required":["key","type"]}},"stills":{"maxItems":12,"type":"array","items":{"type":"string","minLength":1,"maxLength":400,"pattern":"^landing\\/videos\\/[A-Za-z0-9._/-]+$"}},"tier":{"type":"string","maxLength":100},"script":{"type":"object","properties":{"ar":{"type":"string","maxLength":400},"en":{"type":"string","maxLength":400}}},"projectId":{"type":"string","maxLength":64},"uploadDate":{"type":"string","maxLength":40}},"required":["version","kind","sources"]},{"type":"null"}]},"variants":{"description":"Published dialect variants by dialect","type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"object","properties":{"dialect":{"type":"string","minLength":1,"maxLength":20},"label":{"type":"object","properties":{"ar":{"type":"string","maxLength":400},"en":{"type":"string","maxLength":400}}},"sources":{"default":[],"maxItems":4,"type":"array","items":{"type":"object","properties":{"key":{"type":"string","minLength":1,"maxLength":400,"pattern":"^landing\\/videos\\/[A-Za-z0-9._/-]+$"},"type":{"type":"string","enum":["video/webm","video/mp4"]}},"required":["key","type"]}},"poster":{"type":"string","minLength":1,"maxLength":400,"pattern":"^landing\\/videos\\/[A-Za-z0-9._/-]+$"},"durationSeconds":{"type":"number","exclusiveMinimum":0,"maximum":600},"projectId":{"type":"string","maxLength":64},"version":{"type":"string","maxLength":64},"kind":{"type":"string","enum":["project","upload"]}},"required":["dialect","version","kind"],"additionalProperties":{}}},"poster":{"description":"Uploaded poster for the current media","type":"string","minLength":1,"maxLength":400,"pattern":"^landing\\/videos\\/[A-Za-z0-9._/-]+$"},"before":{"description":"Uploaded picture shown beside the video (the photo of a before and after; the reference photo of the video edit how-it-works)","type":"string","minLength":1,"maxLength":400,"pattern":"^landing\\/videos\\/[A-Za-z0-9._/-]+$"},"pending":{"anyOf":[{"type":"object","properties":{"kind":{"type":"string","enum":["project","upload"]},"version":{"type":"string"},"dialect":{"type":["string","null"]},"projectId":{"type":["string","null"]},"startedAt":{"type":"string"},"error":{"type":["string","null"]}},"required":["kind","version","dialect","projectId","startedAt"]},{"type":"null"}]},"updatedAt":{"type":"string"}}},"resolved":{"anyOf":[{"type":"object","properties":{"slot":{"type":"string"},"aspect":{"type":"string","enum":["9:16","16:9","1:1"]},"source":{"type":"string","enum":["default","project","upload"]},"title":{"type":"object","properties":{"ar":{"type":"string"},"en":{"type":"string"}}},"caption":{"type":"object","properties":{"ar":{"type":"string"},"en":{"type":"string"}}},"dialect":{"type":["string","null"]},"durationSeconds":{"type":["number","null"]},"poster":{"description":"Absolute URL","type":["string","null"]},"sources":{"type":"array","items":{"type":"object","properties":{"url":{"type":"string"},"type":{"type":"string","enum":["video/webm","video/mp4"]}},"required":["url","type"]},"description":"WebM first, then MP4; absolute URLs"},"stills":{"type":"array","items":{"type":"string"}},"before":{"type":["string","null"]},"tier":{"type":["string","null"]},"projectId":{"type":["string","null"]},"uploadDate":{"description":"ISO date (VideoObject.uploadDate)","type":["string","null"]},"defaultDialect":{"type":["string","null"]},"variants":{"type":"array","items":{"type":"object","properties":{"dialect":{"type":"string"},"label":{"type":"object","properties":{"ar":{"type":"string"},"en":{"type":"string"}}},"poster":{"type":["string","null"]},"sources":{"type":"array","items":{"type":"object","properties":{"url":{"type":"string"},"type":{"type":"string","enum":["video/webm","video/mp4"]}},"required":["url","type"]}},"durationSeconds":{"type":["number","null"]}},"required":["dialect","label","poster","sources","durationSeconds"]}}},"required":["slot","aspect","source","title","caption","dialect","durationSeconds","poster","sources","stills","before","tier","projectId","uploadDate","defaultDialect","variants"]},{"type":"null"}],"description":"What the landing shows (hidden slots included here for preview)"},"pending":{"anyOf":[{"type":"object","properties":{"kind":{"type":"string","enum":["project","upload"]},"version":{"type":"string"},"dialect":{"type":["string","null"]},"projectId":{"type":["string","null"]},"startedAt":{"type":"string"},"error":{"type":["string","null"]}},"required":["kind","version","dialect","projectId","startedAt"]},{"type":"null"}]},"picture":{"description":"Absolute URL of the uploaded picture (shown with or without a video)","type":["string","null"]},"group":{"description":"Video edit showcase group id (videoEditShowcaseGroups), null for the other slots","type":["string","null"]}},"required":["slot","aspect","source","hidden","known","defaults","override","resolved","pending"]},"example":{"slot":"example","aspect":"9:16","source":"default","hidden":true,"known":true,"defaults":{"aspect":"9:16","dialect":"ar-SA","default":"example","title":{"ar":"مثال","en":"example"},"caption":{"ar":"مثال","en":"example"},"durationSeconds":1,"poster":"example","sources":[{"key":"example","type":"video/webm"}],"stills":["example"],"tier":"example","script":{"ar":"مثال","en":"example"},"projectId":"example","before":"example","variants":[{"dialect":"ar-SA","label":{"ar":"مثال","en":"example"},"sources":[],"poster":"example","durationSeconds":1,"projectId":"example"}],"uploadDate":"example"},"override":{"hidden":true,"title":{"ar":"مثال","en":"example"},"caption":{"ar":"مثال","en":"example"},"labels":{},"order":["example"],"media":{"version":"example","kind":"project","aspect":"9:16","dialect":"ar-SA","durationSeconds":1,"poster":"example","sources":[{"key":"example","type":"video/webm"}],"stills":["example"],"tier":"example","script":{"ar":"مثال","en":"example"},"projectId":"example","uploadDate":"example"},"variants":{},"poster":"example","before":"example","pending":{"kind":"project","version":"example","dialect":"ar-SA","projectId":"example","startedAt":"2026-09-19T12:00:00.000Z","error":"example"},"updatedAt":"2026-09-19T12:00:00.000Z"},"resolved":{"slot":"example","aspect":"9:16","source":"default","title":{"ar":"مثال","en":"example"},"caption":{"ar":"مثال","en":"example"},"dialect":"ar-SA","durationSeconds":"example","poster":"example","sources":[{"url":"example","type":"video/webm"}],"stills":["example"],"before":"example","tier":"example","projectId":"example","uploadDate":"example","defaultDialect":"example","variants":[{"dialect":"ar-SA","label":{"ar":"مثال","en":"example"},"poster":"example","sources":[{"url":"example","type":"video/webm"}],"durationSeconds":"example"}]},"pending":{"kind":"project","version":"example","dialect":"ar-SA","projectId":"example","startedAt":"2026-09-19T12:00:00.000Z","error":"example"},"picture":"example","group":"example"}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/landing/videos/{slot}/publish","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/landing/videos/{slot}/publish","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/landing/videos/{slot}/publish","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/landing/videos/{slot}/publish","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/landing/videos/{slot}/publish","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/landing/videos/{slot}/publish","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/landing/videos/{slot}/publish","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/landing/videos/{slot}/publish","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/landing/videos/{slot}/publish","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/landing/videos/{slot}/publish","traceId":"request-id"}}}}}}},"/v1/admin/landing/videos/{slot}/upload":{"post":{"operationId":"adminUploadLandingVideo","tags":["Admin"],"summary":"Upload an MP4 (at most 50 MB; WebM and poster made by the media worker) or a poster image for the current media","description":"Requires admin permission content.write. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"slot","in":"path","required":true,"schema":{"type":"string"}},{"name":"X-CSRF-Token","in":"header","required":false,"description":"Required for cookie-authenticated mutations; returned by sign-in/sign-up.","schema":{"type":"string"}},{"name":"variantDialect","in":"query","required":false,"schema":{"type":"string","minLength":2,"maxLength":20}},{"name":"kind","in":"query","required":false,"schema":{"default":"video","description":"video = MP4 (at most 50 MB; WebM and poster made by the media worker); poster = JPEG/PNG/WebP (at most 2 MB) for the current media; picture = JPEG/PNG/WebP (at most 2 MB) shown beside the video (before and after photo, reference photo)","type":"string","enum":["video","poster","picture"]}}],"security":[{"session":[]},{"apiKey":[]}],"requestBody":{"required":true,"content":{"application/octet-stream":{"schema":{"type":"string","format":"binary"}}}},"responses":{"202":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"slot":{"type":"string"},"aspect":{"type":"string","enum":["9:16","16:9","1:1"]},"source":{"type":"string","enum":["default","project","upload"]},"hidden":{"type":"boolean"},"known":{"type":"boolean","description":"One of the slots the landing uses"},"defaults":{"anyOf":[{"type":"object","properties":{"aspect":{"type":"string","enum":["9:16","16:9","1:1"]},"dialect":{"type":"string","maxLength":20},"default":{"description":"Default variant dialect (dialects slot)","type":"string","maxLength":20},"title":{"type":"object","properties":{"ar":{"type":"string","maxLength":400},"en":{"type":"string","maxLength":400}}},"caption":{"type":"object","properties":{"ar":{"type":"string","maxLength":400},"en":{"type":"string","maxLength":400}}},"durationSeconds":{"type":"number","exclusiveMinimum":0,"maximum":600},"poster":{"type":"string","minLength":1,"maxLength":400,"pattern":"^landing\\/videos\\/[A-Za-z0-9._/-]+$"},"sources":{"maxItems":4,"type":"array","items":{"type":"object","properties":{"key":{"type":"string","minLength":1,"maxLength":400,"pattern":"^landing\\/videos\\/[A-Za-z0-9._/-]+$"},"type":{"type":"string","enum":["video/webm","video/mp4"]}},"required":["key","type"]}},"stills":{"maxItems":12,"type":"array","items":{"type":"string","minLength":1,"maxLength":400,"pattern":"^landing\\/videos\\/[A-Za-z0-9._/-]+$"}},"tier":{"type":"string","maxLength":100},"script":{"type":"object","properties":{"ar":{"type":"string","maxLength":400},"en":{"type":"string","maxLength":400}}},"projectId":{"type":"string","maxLength":64},"before":{"description":"Product photo (product slot: before/after)","type":"string","minLength":1,"maxLength":400,"pattern":"^landing\\/videos\\/[A-Za-z0-9._/-]+$"},"variants":{"maxItems":12,"type":"array","items":{"type":"object","properties":{"dialect":{"type":"string","minLength":1,"maxLength":20},"label":{"type":"object","properties":{"ar":{"type":"string","maxLength":400},"en":{"type":"string","maxLength":400}}},"sources":{"default":[],"maxItems":4,"type":"array","items":{"type":"object","properties":{"key":{"type":"string","minLength":1,"maxLength":400,"pattern":"^landing\\/videos\\/[A-Za-z0-9._/-]+$"},"type":{"type":"string","enum":["video/webm","video/mp4"]}},"required":["key","type"]}},"poster":{"type":"string","minLength":1,"maxLength":400,"pattern":"^landing\\/videos\\/[A-Za-z0-9._/-]+$"},"durationSeconds":{"type":"number","exclusiveMinimum":0,"maximum":600},"projectId":{"type":"string","maxLength":64}},"required":["dialect"],"additionalProperties":{}}},"uploadDate":{"type":"string","maxLength":40}},"additionalProperties":{}},{"type":"null"}],"description":"The manifest entry"},"override":{"type":"object","properties":{"hidden":{"type":"boolean"},"title":{"type":"object","properties":{"ar":{"type":"string","maxLength":400},"en":{"type":"string","maxLength":400}}},"caption":{"type":"object","properties":{"ar":{"type":"string","maxLength":400},"en":{"type":"string","maxLength":400}}},"labels":{"description":"Dialect variant labels","type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"object","properties":{"ar":{"type":"string","maxLength":400},"en":{"type":"string","maxLength":400}}}},"order":{"description":"Dialect variant order","maxItems":12,"type":"array","items":{"type":"string","maxLength":20}},"media":{"anyOf":[{"type":"object","properties":{"version":{"type":"string","maxLength":64},"kind":{"type":"string","enum":["project","upload"]},"aspect":{"type":"string","enum":["9:16","16:9","1:1"]},"dialect":{"type":"string","maxLength":20},"durationSeconds":{"type":"number","exclusiveMinimum":0,"maximum":600},"poster":{"type":"string","minLength":1,"maxLength":400,"pattern":"^landing\\/videos\\/[A-Za-z0-9._/-]+$"},"sources":{"maxItems":4,"type":"array","items":{"type":"object","properties":{"key":{"type":"string","minLength":1,"maxLength":400,"pattern":"^landing\\/videos\\/[A-Za-z0-9._/-]+$"},"type":{"type":"string","enum":["video/webm","video/mp4"]}},"required":["key","type"]}},"stills":{"maxItems":12,"type":"array","items":{"type":"string","minLength":1,"maxLength":400,"pattern":"^landing\\/videos\\/[A-Za-z0-9._/-]+$"}},"tier":{"type":"string","maxLength":100},"script":{"type":"object","properties":{"ar":{"type":"string","maxLength":400},"en":{"type":"string","maxLength":400}}},"projectId":{"type":"string","maxLength":64},"uploadDate":{"type":"string","maxLength":40}},"required":["version","kind","sources"]},{"type":"null"}]},"variants":{"description":"Published dialect variants by dialect","type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"object","properties":{"dialect":{"type":"string","minLength":1,"maxLength":20},"label":{"type":"object","properties":{"ar":{"type":"string","maxLength":400},"en":{"type":"string","maxLength":400}}},"sources":{"default":[],"maxItems":4,"type":"array","items":{"type":"object","properties":{"key":{"type":"string","minLength":1,"maxLength":400,"pattern":"^landing\\/videos\\/[A-Za-z0-9._/-]+$"},"type":{"type":"string","enum":["video/webm","video/mp4"]}},"required":["key","type"]}},"poster":{"type":"string","minLength":1,"maxLength":400,"pattern":"^landing\\/videos\\/[A-Za-z0-9._/-]+$"},"durationSeconds":{"type":"number","exclusiveMinimum":0,"maximum":600},"projectId":{"type":"string","maxLength":64},"version":{"type":"string","maxLength":64},"kind":{"type":"string","enum":["project","upload"]}},"required":["dialect","version","kind"],"additionalProperties":{}}},"poster":{"description":"Uploaded poster for the current media","type":"string","minLength":1,"maxLength":400,"pattern":"^landing\\/videos\\/[A-Za-z0-9._/-]+$"},"before":{"description":"Uploaded picture shown beside the video (the photo of a before and after; the reference photo of the video edit how-it-works)","type":"string","minLength":1,"maxLength":400,"pattern":"^landing\\/videos\\/[A-Za-z0-9._/-]+$"},"pending":{"anyOf":[{"type":"object","properties":{"kind":{"type":"string","enum":["project","upload"]},"version":{"type":"string"},"dialect":{"type":["string","null"]},"projectId":{"type":["string","null"]},"startedAt":{"type":"string"},"error":{"type":["string","null"]}},"required":["kind","version","dialect","projectId","startedAt"]},{"type":"null"}]},"updatedAt":{"type":"string"}}},"resolved":{"anyOf":[{"type":"object","properties":{"slot":{"type":"string"},"aspect":{"type":"string","enum":["9:16","16:9","1:1"]},"source":{"type":"string","enum":["default","project","upload"]},"title":{"type":"object","properties":{"ar":{"type":"string"},"en":{"type":"string"}}},"caption":{"type":"object","properties":{"ar":{"type":"string"},"en":{"type":"string"}}},"dialect":{"type":["string","null"]},"durationSeconds":{"type":["number","null"]},"poster":{"description":"Absolute URL","type":["string","null"]},"sources":{"type":"array","items":{"type":"object","properties":{"url":{"type":"string"},"type":{"type":"string","enum":["video/webm","video/mp4"]}},"required":["url","type"]},"description":"WebM first, then MP4; absolute URLs"},"stills":{"type":"array","items":{"type":"string"}},"before":{"type":["string","null"]},"tier":{"type":["string","null"]},"projectId":{"type":["string","null"]},"uploadDate":{"description":"ISO date (VideoObject.uploadDate)","type":["string","null"]},"defaultDialect":{"type":["string","null"]},"variants":{"type":"array","items":{"type":"object","properties":{"dialect":{"type":"string"},"label":{"type":"object","properties":{"ar":{"type":"string"},"en":{"type":"string"}}},"poster":{"type":["string","null"]},"sources":{"type":"array","items":{"type":"object","properties":{"url":{"type":"string"},"type":{"type":"string","enum":["video/webm","video/mp4"]}},"required":["url","type"]}},"durationSeconds":{"type":["number","null"]}},"required":["dialect","label","poster","sources","durationSeconds"]}}},"required":["slot","aspect","source","title","caption","dialect","durationSeconds","poster","sources","stills","before","tier","projectId","uploadDate","defaultDialect","variants"]},{"type":"null"}],"description":"What the landing shows (hidden slots included here for preview)"},"pending":{"anyOf":[{"type":"object","properties":{"kind":{"type":"string","enum":["project","upload"]},"version":{"type":"string"},"dialect":{"type":["string","null"]},"projectId":{"type":["string","null"]},"startedAt":{"type":"string"},"error":{"type":["string","null"]}},"required":["kind","version","dialect","projectId","startedAt"]},{"type":"null"}]},"picture":{"description":"Absolute URL of the uploaded picture (shown with or without a video)","type":["string","null"]},"group":{"description":"Video edit showcase group id (videoEditShowcaseGroups), null for the other slots","type":["string","null"]}},"required":["slot","aspect","source","hidden","known","defaults","override","resolved","pending"]},"example":{"slot":"example","aspect":"9:16","source":"default","hidden":true,"known":true,"defaults":{"aspect":"9:16","dialect":"ar-SA","default":"example","title":{"ar":"مثال","en":"example"},"caption":{"ar":"مثال","en":"example"},"durationSeconds":1,"poster":"example","sources":[{"key":"example","type":"video/webm"}],"stills":["example"],"tier":"example","script":{"ar":"مثال","en":"example"},"projectId":"example","before":"example","variants":[{"dialect":"ar-SA","label":{"ar":"مثال","en":"example"},"sources":[],"poster":"example","durationSeconds":1,"projectId":"example"}],"uploadDate":"example"},"override":{"hidden":true,"title":{"ar":"مثال","en":"example"},"caption":{"ar":"مثال","en":"example"},"labels":{},"order":["example"],"media":{"version":"example","kind":"project","aspect":"9:16","dialect":"ar-SA","durationSeconds":1,"poster":"example","sources":[{"key":"example","type":"video/webm"}],"stills":["example"],"tier":"example","script":{"ar":"مثال","en":"example"},"projectId":"example","uploadDate":"example"},"variants":{},"poster":"example","before":"example","pending":{"kind":"project","version":"example","dialect":"ar-SA","projectId":"example","startedAt":"2026-09-19T12:00:00.000Z","error":"example"},"updatedAt":"2026-09-19T12:00:00.000Z"},"resolved":{"slot":"example","aspect":"9:16","source":"default","title":{"ar":"مثال","en":"example"},"caption":{"ar":"مثال","en":"example"},"dialect":"ar-SA","durationSeconds":"example","poster":"example","sources":[{"url":"example","type":"video/webm"}],"stills":["example"],"before":"example","tier":"example","projectId":"example","uploadDate":"example","defaultDialect":"example","variants":[{"dialect":"ar-SA","label":{"ar":"مثال","en":"example"},"poster":"example","sources":[{"url":"example","type":"video/webm"}],"durationSeconds":"example"}]},"pending":{"kind":"project","version":"example","dialect":"ar-SA","projectId":"example","startedAt":"2026-09-19T12:00:00.000Z","error":"example"},"picture":"example","group":"example"}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/landing/videos/{slot}/upload","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/landing/videos/{slot}/upload","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/landing/videos/{slot}/upload","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/landing/videos/{slot}/upload","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/landing/videos/{slot}/upload","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/landing/videos/{slot}/upload","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/landing/videos/{slot}/upload","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/landing/videos/{slot}/upload","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/landing/videos/{slot}/upload","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/landing/videos/{slot}/upload","traceId":"request-id"}}}}}}},"/v1/admin/landing/rebuild":{"get":{"operationId":"adminGetLandingRebuild","tags":["Admin"],"summary":"Whether automatic landing rebuilds are configured, and the last request","description":"Requires admin permission landing.read. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false}],"security":[{"session":[]},{"apiKey":[]}],"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"configured":{"type":"boolean","description":"LANDING_DEPLOY_HOOK_URL is set (the URL itself is never returned)"},"pending":{"type":"boolean","description":"A rebuild is queued or being requested"},"delaySeconds":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Quiet period after an admin change before the hook is called"},"status":{"anyOf":[{"type":"string","enum":["queued","requested","retrying","failed"]},{"type":"null"}],"description":"Last request: queued (waiting for the quiet period), requested (Cloudflare accepted it), retrying or failed"},"reasons":{"type":"array","items":{"type":"string"},"description":"The changes that asked for it, e.g. plans.update"},"queuedAt":{"type":["string","null"]},"runAt":{"description":"When the hook is (or was) due","type":["string","null"]},"triggeredAt":{"description":"When Cloudflare last accepted a build request","type":["string","null"]},"buildId":{"description":"Cloudflare build id, when the hook answer has one","type":["string","null"]},"httpStatus":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"error":{"type":["string","null"]},"attempts":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"updatedAt":{"type":["string","null"]}},"required":["configured","pending","delaySeconds","status","reasons","queuedAt","runAt","triggeredAt","buildId","httpStatus","error","attempts","updatedAt"]},"example":{"configured":true,"pending":true,"delaySeconds":-9007199254740991,"status":"queued","reasons":["example"],"queuedAt":"2026-09-19T12:00:00.000Z","runAt":"2026-09-19T12:00:00.000Z","triggeredAt":"2026-09-19T12:00:00.000Z","buildId":"example","httpStatus":-9007199254740991,"error":"example","attempts":-9007199254740991,"updatedAt":"2026-09-19T12:00:00.000Z"}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/landing/rebuild","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/landing/rebuild","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/landing/rebuild","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/landing/rebuild","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/landing/rebuild","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/landing/rebuild","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/landing/rebuild","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/landing/rebuild","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/landing/rebuild","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/landing/rebuild","traceId":"request-id"}}}}}},"post":{"operationId":"adminRequestLandingRebuild","tags":["Admin"],"summary":"Rebuild the landing now (audited); 409 not_configured without LANDING_DEPLOY_HOOK_URL. Admin changes the landing shows also queue one, 90 s after the last change (response header X-Landing-Rebuild: queued)","description":"Requires admin permission landing.write. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"X-CSRF-Token","in":"header","required":false,"description":"Required for cookie-authenticated mutations; returned by sign-in/sign-up.","schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","default":{},"type":"object","properties":{"reason":{"type":"string","minLength":1,"maxLength":500}}},"example":{}}}},"responses":{"202":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"configured":{"type":"boolean","description":"LANDING_DEPLOY_HOOK_URL is set (the URL itself is never returned)"},"pending":{"type":"boolean","description":"A rebuild is queued or being requested"},"delaySeconds":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Quiet period after an admin change before the hook is called"},"status":{"anyOf":[{"type":"string","enum":["queued","requested","retrying","failed"]},{"type":"null"}],"description":"Last request: queued (waiting for the quiet period), requested (Cloudflare accepted it), retrying or failed"},"reasons":{"type":"array","items":{"type":"string"},"description":"The changes that asked for it, e.g. plans.update"},"queuedAt":{"type":["string","null"]},"runAt":{"description":"When the hook is (or was) due","type":["string","null"]},"triggeredAt":{"description":"When Cloudflare last accepted a build request","type":["string","null"]},"buildId":{"description":"Cloudflare build id, when the hook answer has one","type":["string","null"]},"httpStatus":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"error":{"type":["string","null"]},"attempts":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"updatedAt":{"type":["string","null"]}},"required":["configured","pending","delaySeconds","status","reasons","queuedAt","runAt","triggeredAt","buildId","httpStatus","error","attempts","updatedAt"]},"example":{"configured":true,"pending":true,"delaySeconds":-9007199254740991,"status":"queued","reasons":["example"],"queuedAt":"2026-09-19T12:00:00.000Z","runAt":"2026-09-19T12:00:00.000Z","triggeredAt":"2026-09-19T12:00:00.000Z","buildId":"example","httpStatus":-9007199254740991,"error":"example","attempts":-9007199254740991,"updatedAt":"2026-09-19T12:00:00.000Z"}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/landing/rebuild","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/landing/rebuild","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/landing/rebuild","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/landing/rebuild","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/landing/rebuild","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/landing/rebuild","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/landing/rebuild","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/landing/rebuild","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/landing/rebuild","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/landing/rebuild","traceId":"request-id"}}}}}}},"/v1/admin/voices/{id}/sample":{"get":{"operationId":"adminGetVoiceSample","tags":["Admin"],"summary":"admin Get Voice Sample","description":"Requires admin permission voices.read. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"voiceId":{"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)$"},"url":{"type":["string","null"]},"duration":{"type":["number","null"]},"size":{"type":["number","null"]},"format":{"type":["string","null"]},"sampleRate":{"type":["number","null"]},"provider":{"type":["string","null"]},"model":{"type":["string","null"]},"sampleText":{"description":"The text as it was spoken when the audio was made","type":["string","null"]},"generatedAt":{"type":["string","null"]},"source":{"anyOf":[{"type":"string","enum":["generated","uploaded"]},{"type":"null"}]},"peaks":{"type":"array","items":{"type":"number"}},"dialect":{"description":"The dialect the sample is read in; samples made before dialects were recorded report the voice dialect","type":["string","null"]},"voiceDialect":{"type":"string","description":"The voice’s own catalog dialect, for comparison"}},"required":["voiceId","url","duration","size","format","sampleRate","provider","model","sampleText","generatedAt","source","dialect","voiceDialect"]},"example":{"voiceId":"01990000-0000-7000-8000-000000000001","url":"example","duration":"example","size":"example","format":"example","sampleRate":"example","provider":"example","model":"example","sampleText":"example","generatedAt":"2026-09-19T12:00:00.000Z","source":"generated","peaks":[1],"dialect":"ar-SA","voiceDialect":"example"}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/voices/{id}/sample","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/voices/{id}/sample","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/voices/{id}/sample","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/voices/{id}/sample","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/voices/{id}/sample","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/voices/{id}/sample","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/voices/{id}/sample","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/voices/{id}/sample","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/voices/{id}/sample","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/voices/{id}/sample","traceId":"request-id"}}}}}},"post":{"operationId":"adminGenerateVoiceSample","tags":["Admin"],"summary":"Make the sample again, optionally in another dialect or from unsaved text","description":"Requires admin permission voices.write. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"X-CSRF-Token","in":"header","required":false,"description":"Required for cookie-authenticated mutations; returned by sign-in/sign-up.","schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"productModelId":{"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)$"},"dialect":{"description":"Defaults to the voice dialect","type":"string","enum":["ar-SA","ar-AE","ar-KW","ar-QA","ar-BH","ar-OM","ar-YE","ar-IQ","ar-EG","ar-SD","ar-JO","ar-LB","ar-SY","ar-PS","ar-MA","ar-DZ","ar-TN","ar-LY","ar","en-US","fr-FR","es-ES","es-MX","pt-BR","pt-PT","de-DE","tr-TR","ur-PK","hi-IN","ku-IQ","ku-TR","he-IL"]},"text":{"description":"Defaults to the voice data.sampleText","type":"string","minLength":1,"maxLength":600}}},"example":{"productModelId":"01990000-0000-7000-8000-000000000001","dialect":"ar-SA","text":"مرحباً بك في فوكلا."}}}},"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"voiceId":{"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)$"},"url":{"type":["string","null"]},"duration":{"type":["number","null"]},"size":{"type":["number","null"]},"format":{"type":["string","null"]},"sampleRate":{"type":["number","null"]},"provider":{"type":["string","null"]},"model":{"type":["string","null"]},"sampleText":{"description":"The text as it was spoken when the audio was made","type":["string","null"]},"generatedAt":{"type":["string","null"]},"source":{"anyOf":[{"type":"string","enum":["generated","uploaded"]},{"type":"null"}]},"peaks":{"type":"array","items":{"type":"number"}},"dialect":{"description":"The dialect the sample is read in; samples made before dialects were recorded report the voice dialect","type":["string","null"]},"voiceDialect":{"type":"string","description":"The voice’s own catalog dialect, for comparison"}},"required":["voiceId","url","duration","size","format","sampleRate","provider","model","sampleText","generatedAt","source","dialect","voiceDialect"]},"example":{"voiceId":"01990000-0000-7000-8000-000000000001","url":"example","duration":"example","size":"example","format":"example","sampleRate":"example","provider":"example","model":"example","sampleText":"example","generatedAt":"2026-09-19T12:00:00.000Z","source":"generated","peaks":[1],"dialect":"ar-SA","voiceDialect":"example"}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/voices/{id}/sample","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/voices/{id}/sample","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/voices/{id}/sample","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/voices/{id}/sample","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/voices/{id}/sample","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/voices/{id}/sample","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/voices/{id}/sample","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/voices/{id}/sample","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/voices/{id}/sample","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/voices/{id}/sample","traceId":"request-id"}}}}}},"put":{"operationId":"adminUploadVoiceSample","tags":["Admin"],"summary":"Replace the sample with an uploaded 16-bit PCM WAV","description":"Requires admin permission voices.write. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"X-CSRF-Token","in":"header","required":false,"description":"Required for cookie-authenticated mutations; returned by sign-in/sign-up.","schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"requestBody":{"required":true,"content":{"application/octet-stream":{"schema":{"type":"string","format":"binary"}}}},"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"voiceId":{"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)$"},"url":{"type":["string","null"]},"duration":{"type":["number","null"]},"size":{"type":["number","null"]},"format":{"type":["string","null"]},"sampleRate":{"type":["number","null"]},"provider":{"type":["string","null"]},"model":{"type":["string","null"]},"sampleText":{"description":"The text as it was spoken when the audio was made","type":["string","null"]},"generatedAt":{"type":["string","null"]},"source":{"anyOf":[{"type":"string","enum":["generated","uploaded"]},{"type":"null"}]},"peaks":{"type":"array","items":{"type":"number"}},"dialect":{"description":"The dialect the sample is read in; samples made before dialects were recorded report the voice dialect","type":["string","null"]},"voiceDialect":{"type":"string","description":"The voice’s own catalog dialect, for comparison"}},"required":["voiceId","url","duration","size","format","sampleRate","provider","model","sampleText","generatedAt","source","dialect","voiceDialect"]},"example":{"voiceId":"01990000-0000-7000-8000-000000000001","url":"example","duration":"example","size":"example","format":"example","sampleRate":"example","provider":"example","model":"example","sampleText":"example","generatedAt":"2026-09-19T12:00:00.000Z","source":"generated","peaks":[1],"dialect":"ar-SA","voiceDialect":"example"}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/voices/{id}/sample","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/voices/{id}/sample","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/voices/{id}/sample","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/voices/{id}/sample","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/voices/{id}/sample","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/voices/{id}/sample","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/voices/{id}/sample","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/voices/{id}/sample","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/voices/{id}/sample","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/voices/{id}/sample","traceId":"request-id"}}}}}},"delete":{"operationId":"adminDeleteVoiceSample","tags":["Admin"],"summary":"admin Delete Voice Sample","description":"Requires admin permission voices.write. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"X-CSRF-Token","in":"header","required":false,"description":"Required for cookie-authenticated mutations; returned by sign-in/sign-up.","schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"ok":{"type":"boolean"}},"required":["ok"]},"example":{"ok":true}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/voices/{id}/sample","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/voices/{id}/sample","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/voices/{id}/sample","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/voices/{id}/sample","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/voices/{id}/sample","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/voices/{id}/sample","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/voices/{id}/sample","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/voices/{id}/sample","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/voices/{id}/sample","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/voices/{id}/sample","traceId":"request-id"}}}}}}},"/v1/admin/voices/{id}/sample/adapt-text":{"post":{"operationId":"adminAdaptVoiceSampleText","tags":["Admin"],"summary":"Rewrite the sample text natively in a dialect (nothing is saved)","description":"Requires admin permission voices.write. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"X-CSRF-Token","in":"header","required":false,"description":"Required for cookie-authenticated mutations; returned by sign-in/sign-up.","schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"dialect":{"type":"string","enum":["ar-SA","ar-AE","ar-KW","ar-QA","ar-BH","ar-OM","ar-YE","ar-IQ","ar-EG","ar-SD","ar-JO","ar-LB","ar-SY","ar-PS","ar-MA","ar-DZ","ar-TN","ar-LY","ar","en-US","fr-FR","es-ES","es-MX","pt-BR","pt-PT","de-DE","tr-TR","ur-PK","hi-IN","ku-IQ","ku-TR","he-IL"]},"text":{"description":"Defaults to the voice data.sampleText","type":"string","minLength":1,"maxLength":600},"uiLocale":{"type":"string","enum":["ar","en"]},"productModelId":{"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)$"}},"required":["dialect"]},"example":{"dialect":"ar-SA","text":"مرحباً بك في فوكلا.","uiLocale":"ar","productModelId":"01990000-0000-7000-8000-000000000001"}}}},"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"text":{"type":"string"},"dialect":{"type":"string","enum":["ar-SA","ar-AE","ar-KW","ar-QA","ar-BH","ar-OM","ar-YE","ar-IQ","ar-EG","ar-SD","ar-JO","ar-LB","ar-SY","ar-PS","ar-MA","ar-DZ","ar-TN","ar-LY","ar","en-US","fr-FR","es-ES","es-MX","pt-BR","pt-PT","de-DE","tr-TR","ur-PK","hi-IN","ku-IQ","ku-TR","he-IL"]},"sourceText":{"type":"string","description":"The text that was adapted"},"notes":{"description":"The main dialect choices, in uiLocale","type":"string"},"estimatedSeconds":{"type":"object","properties":{"before":{"type":"number"},"after":{"type":"number"}},"required":["before","after"],"description":"Rough reading time at a natural pace"}},"required":["text","dialect","sourceText","estimatedSeconds"]},"example":{"text":"مرحباً بك في فوكلا.","dialect":"ar-SA","sourceText":"example","notes":"example","estimatedSeconds":{"before":1,"after":1}}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/voices/{id}/sample/adapt-text","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/voices/{id}/sample/adapt-text","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/voices/{id}/sample/adapt-text","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/voices/{id}/sample/adapt-text","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/voices/{id}/sample/adapt-text","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/voices/{id}/sample/adapt-text","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/voices/{id}/sample/adapt-text","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/voices/{id}/sample/adapt-text","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/voices/{id}/sample/adapt-text","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/voices/{id}/sample/adapt-text","traceId":"request-id"}}}}}}},"/v1/admin/voice-designs/base-voices":{"get":{"operationId":"adminListVoiceDesignBaseVoices","tags":["Admin"],"summary":"The prebuilt Gemini voices a design can start from","description":"Requires admin permission voices.read. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false}],"security":[{"session":[]},{"apiKey":[]}],"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"voices":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","description":"Gemini prebuilt voice name (binding provider_voice)"},"gender":{"type":"string","enum":["male","female"]},"age":{"type":"string","enum":["young","adult","mature"],"description":"How old the voice comes across"},"character":{"type":"string","description":"Google's one-word character, e.g. firm, breathy"}},"required":["name","gender","age","character"]}}},"required":["voices"]},"example":{"voices":[{"name":"Noura","gender":"male","age":"young","character":"example"}]}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/voice-designs/base-voices","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/voice-designs/base-voices","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/voice-designs/base-voices","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/voice-designs/base-voices","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/voice-designs/base-voices","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/voice-designs/base-voices","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/voice-designs/base-voices","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/voice-designs/base-voices","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/voice-designs/base-voices","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/voice-designs/base-voices","traceId":"request-id"}}}}}}},"/v1/admin/voice-designs":{"post":{"operationId":"adminCreateVoiceDesign","tags":["Admin"],"summary":"Design candidate voices from a description (synchronous; nothing is saved; 503 without a real design route)","description":"Requires admin permission voices.write. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"X-CSRF-Token","in":"header","required":false,"description":"Required for cookie-authenticated mutations; returned by sign-in/sign-up.","schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"prompt":{"type":"string","minLength":1,"maxLength":2000},"dialect":{"type":"string","enum":["ar-SA","ar-AE","ar-KW","ar-QA","ar-BH","ar-OM","ar-YE","ar-IQ","ar-EG","ar-SD","ar-JO","ar-LB","ar-SY","ar-PS","ar-MA","ar-DZ","ar-TN","ar-LY","ar","en-US","fr-FR","es-ES","es-MX","pt-BR","pt-PT","de-DE","tr-TR","ur-PK","hi-IN","ku-IQ","ku-TR","he-IL","en-GB"],"description":"The speech dialect the voice is designed for and its samples are read in"},"gender":{"type":"string","enum":["male","female","neutral"]},"age":{"type":"string","enum":["young","middle-aged","old"]},"previewText":{"description":"Read by every candidate; default a short greeting","type":"string","maxLength":600},"params":{"description":"Default the catalogue sample settings","type":"object","properties":{"speed":{"default":50,"type":"number","minimum":0,"maximum":100},"consistency":{"default":50,"type":"number","minimum":0,"maximum":100},"voiceMatch":{"default":75,"type":"number","minimum":0,"maximum":100},"expressiveness":{"default":50,"type":"number","minimum":0,"maximum":100},"clarity":{"default":75,"type":"number","minimum":0,"maximum":100},"energyMode":{"default":"normal","type":"string","enum":["normal","boost"]}}},"productModelId":{"description":"Whose design route is used; default Vox Stream","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)$"}},"required":["prompt","dialect"]},"example":{"prompt":"مرحباً بك في فوكلا.","dialect":"ar-SA","gender":"male","age":"young","previewText":"example","params":{"speed":50,"consistency":50,"voiceMatch":75,"expressiveness":50,"clarity":75,"energyMode":"normal"},"productModelId":"01990000-0000-7000-8000-000000000001"}}}},"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"provider":{"type":"string","description":"The provider that designed the candidates"},"candidates":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"stylePrompt":{"type":"string"},"provider":{"type":"string"},"providerVoice":{"type":"string"},"audio":{"type":"string","description":"Base64 audio, played inline and never stored"},"mimeType":{"type":"string"},"durationSeconds":{"type":"number"},"peaks":{"type":"array","items":{"type":"number"}}},"required":["id","name","description","stylePrompt","provider","providerVoice","audio","mimeType","durationSeconds"]}}},"required":["provider","candidates"]},"example":{"provider":"example","candidates":[{"id":"example","name":"Noura","description":"example","stylePrompt":"example","provider":"example","providerVoice":"example","audio":"example","mimeType":"example","durationSeconds":1,"peaks":[1]}]}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/voice-designs","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/voice-designs","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/voice-designs","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/voice-designs","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/voice-designs","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/voice-designs","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/voice-designs","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/voice-designs","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/voice-designs","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/voice-designs","traceId":"request-id"}}}}}}},"/v1/admin/voice-designs/audition":{"post":{"operationId":"adminAuditionVoiceDesign","tags":["Admin"],"summary":"Read a text with an exact base voice, style prompt and dialect (nothing is saved)","description":"Requires admin permission voices.write. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"X-CSRF-Token","in":"header","required":false,"description":"Required for cookie-authenticated mutations; returned by sign-in/sign-up.","schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"provider":{"default":"google","type":"string","minLength":1,"maxLength":50},"providerVoice":{"type":"string","minLength":1,"maxLength":100,"description":"For google, one of the base voices"},"stylePrompt":{"default":"","type":"string","maxLength":2000},"dialect":{"type":"string","enum":["ar-SA","ar-AE","ar-KW","ar-QA","ar-BH","ar-OM","ar-YE","ar-IQ","ar-EG","ar-SD","ar-JO","ar-LB","ar-SY","ar-PS","ar-MA","ar-DZ","ar-TN","ar-LY","ar","en-US","fr-FR","es-ES","es-MX","pt-BR","pt-PT","de-DE","tr-TR","ur-PK","hi-IN","ku-IQ","ku-TR","he-IL","en-GB"],"description":"The speech dialect the voice is designed for and its samples are read in"},"text":{"type":"string","minLength":1,"maxLength":600},"params":{"description":"Default the catalogue sample settings","type":"object","properties":{"speed":{"default":50,"type":"number","minimum":0,"maximum":100},"consistency":{"default":50,"type":"number","minimum":0,"maximum":100},"voiceMatch":{"default":75,"type":"number","minimum":0,"maximum":100},"expressiveness":{"default":50,"type":"number","minimum":0,"maximum":100},"clarity":{"default":75,"type":"number","minimum":0,"maximum":100},"energyMode":{"default":"normal","type":"string","enum":["normal","boost"]}}},"productModelId":{"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)$"}},"required":["providerVoice","dialect","text"]},"example":{"provider":"google","providerVoice":"example","stylePrompt":"","dialect":"ar-SA","text":"مرحباً بك في فوكلا.","params":{"speed":50,"consistency":50,"voiceMatch":75,"expressiveness":50,"clarity":75,"energyMode":"normal"},"productModelId":"01990000-0000-7000-8000-000000000001"}}}},"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"provider":{"type":"string"},"providerVoice":{"type":"string"},"audio":{"type":"string","description":"Base64 audio, played inline and never stored"},"mimeType":{"type":"string"},"durationSeconds":{"type":"number"},"peaks":{"type":"array","items":{"type":"number"}}},"required":["provider","providerVoice","audio","mimeType","durationSeconds"]},"example":{"provider":"example","providerVoice":"example","audio":"example","mimeType":"example","durationSeconds":1,"peaks":[1]}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/voice-designs/audition","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/voice-designs/audition","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/voice-designs/audition","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/voice-designs/audition","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/voice-designs/audition","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/voice-designs/audition","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/voice-designs/audition","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/voice-designs/audition","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/voice-designs/audition","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/voice-designs/audition","traceId":"request-id"}}}}}}},"/v1/admin/voice-designs/adapt-text":{"post":{"operationId":"adminAdaptVoiceDesignText","tags":["Admin"],"summary":"Rewrite a sample text natively in a dialect before the voice exists (nothing is saved)","description":"Requires admin permission voices.write. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"X-CSRF-Token","in":"header","required":false,"description":"Required for cookie-authenticated mutations; returned by sign-in/sign-up.","schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"dialect":{"type":"string","enum":["ar-SA","ar-AE","ar-KW","ar-QA","ar-BH","ar-OM","ar-YE","ar-IQ","ar-EG","ar-SD","ar-JO","ar-LB","ar-SY","ar-PS","ar-MA","ar-DZ","ar-TN","ar-LY","ar","en-US","fr-FR","es-ES","es-MX","pt-BR","pt-PT","de-DE","tr-TR","ur-PK","hi-IN","ku-IQ","ku-TR","he-IL"]},"text":{"type":"string","minLength":1,"maxLength":600},"uiLocale":{"type":"string","enum":["ar","en"]},"productModelId":{"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)$"}},"required":["dialect","text"]},"example":{"dialect":"ar-SA","text":"مرحباً بك في فوكلا.","uiLocale":"ar","productModelId":"01990000-0000-7000-8000-000000000001"}}}},"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"text":{"type":"string"},"dialect":{"type":"string","enum":["ar-SA","ar-AE","ar-KW","ar-QA","ar-BH","ar-OM","ar-YE","ar-IQ","ar-EG","ar-SD","ar-JO","ar-LB","ar-SY","ar-PS","ar-MA","ar-DZ","ar-TN","ar-LY","ar","en-US","fr-FR","es-ES","es-MX","pt-BR","pt-PT","de-DE","tr-TR","ur-PK","hi-IN","ku-IQ","ku-TR","he-IL"]},"sourceText":{"type":"string","description":"The text that was adapted"},"notes":{"description":"The main dialect choices, in uiLocale","type":"string"},"estimatedSeconds":{"type":"object","properties":{"before":{"type":"number"},"after":{"type":"number"}},"required":["before","after"],"description":"Rough reading time at a natural pace"}},"required":["text","dialect","sourceText","estimatedSeconds"]},"example":{"text":"مرحباً بك في فوكلا.","dialect":"ar-SA","sourceText":"example","notes":"example","estimatedSeconds":{"before":1,"after":1}}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/voice-designs/adapt-text","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/voice-designs/adapt-text","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/voice-designs/adapt-text","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/voice-designs/adapt-text","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/voice-designs/adapt-text","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/voice-designs/adapt-text","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/voice-designs/adapt-text","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/voice-designs/adapt-text","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/voice-designs/adapt-text","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/voice-designs/adapt-text","traceId":"request-id"}}}}}}},"/v1/admin/voice-designs/publish":{"post":{"operationId":"adminPublishVoiceDesign","tags":["Admin"],"summary":"Create the catalogue voice with its bindings and make its sample; 409 when the slug is taken","description":"Requires admin permission voices.write. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"X-CSRF-Token","in":"header","required":false,"description":"Required for cookie-authenticated mutations; returned by sign-in/sign-up.","schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"slug":{"type":"string","pattern":"^[a-z0-9-]{2,100}$"},"name":{"type":"object","properties":{"ar":{"type":"string","minLength":1},"en":{"type":"string","minLength":1}},"required":["ar","en"]},"description":{"type":"object","properties":{"ar":{"type":"string","minLength":1},"en":{"type":"string","minLength":1}},"required":["ar","en"]},"dialect":{"type":"string","enum":["ar-SA","ar-AE","ar-KW","ar-QA","ar-BH","ar-OM","ar-YE","ar-IQ","ar-EG","ar-SD","ar-JO","ar-LB","ar-SY","ar-PS","ar-MA","ar-DZ","ar-TN","ar-LY","ar","en-US","fr-FR","es-ES","es-MX","pt-BR","pt-PT","de-DE","tr-TR","ur-PK","hi-IN","ku-IQ","ku-TR","he-IL","en-GB"],"description":"The speech dialect the voice is designed for and its samples are read in"},"gender":{"type":"string","enum":["male","female","neutral"]},"age":{"type":"string","minLength":1,"maxLength":50},"category":{"type":"string","minLength":1,"maxLength":100},"tags":{"default":[],"maxItems":20,"type":"array","items":{"type":"string","minLength":1,"maxLength":50}},"premium":{"default":false,"type":"boolean"},"isPublic":{"default":false,"description":"false keeps it a hidden draft","type":"boolean"},"provider":{"default":"google","type":"string","minLength":1,"maxLength":50},"providerVoice":{"type":"string","minLength":1,"maxLength":100},"stylePrompt":{"type":"string","minLength":1,"maxLength":2000},"sampleText":{"type":"string","minLength":1,"maxLength":600},"openaiFallback":{"default":true,"description":"Also bind OpenAI (nova for female voices, onyx otherwise) as the fallback","type":"boolean"},"productModelId":{"description":"Speaks the sample; default the highest-priority route","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)$"}},"required":["slug","name","description","dialect","gender","age","category","providerVoice","stylePrompt","sampleText"]},"example":{"slug":"example","name":{"ar":"مثال","en":"example"},"description":{"ar":"مثال","en":"example"},"dialect":"ar-SA","gender":"male","age":"example","category":"example","tags":[],"premium":false,"isPublic":false,"provider":"google","providerVoice":"example","stylePrompt":"example","sampleText":"example","openaiFallback":true,"productModelId":"01990000-0000-7000-8000-000000000001"}}}},"responses":{"201":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","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)$"},"voice":{"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)$"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"},"data":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}}},"required":["id","createdAt","updatedAt"],"additionalProperties":{}},"sample":{"anyOf":[{"type":"object","properties":{"voiceId":{"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)$"},"url":{"type":["string","null"]},"duration":{"type":["number","null"]},"size":{"type":["number","null"]},"format":{"type":["string","null"]},"sampleRate":{"type":["number","null"]},"provider":{"type":["string","null"]},"model":{"type":["string","null"]},"sampleText":{"description":"The text as it was spoken when the audio was made","type":["string","null"]},"generatedAt":{"type":["string","null"]},"source":{"anyOf":[{"type":"string","enum":["generated","uploaded"]},{"type":"null"}]},"peaks":{"type":"array","items":{"type":"number"}},"dialect":{"description":"The dialect the sample is read in; samples made before dialects were recorded report the voice dialect","type":["string","null"]},"voiceDialect":{"type":"string","description":"The voice’s own catalog dialect, for comparison"}},"required":["voiceId","url","duration","size","format","sampleRate","provider","model","sampleText","generatedAt","source","dialect","voiceDialect"]},{"type":"null"}]},"sampleError":{"description":"Why the sample could not be made (the voice is published regardless; fix the text and make it again)","type":["string","null"]}},"required":["id","voice","sample","sampleError"]},"example":{"id":"01990000-0000-7000-8000-000000000001","voice":{"id":"01990000-0000-7000-8000-000000000001","createdAt":"2026-09-19T12:00:00.000Z","updatedAt":"2026-09-19T12:00:00.000Z","data":{}},"sample":{"voiceId":"01990000-0000-7000-8000-000000000001","url":"example","duration":"example","size":"example","format":"example","sampleRate":"example","provider":"example","model":"example","sampleText":"example","generatedAt":"2026-09-19T12:00:00.000Z","source":"generated","peaks":[1],"dialect":"ar-SA","voiceDialect":"example"},"sampleError":"example"}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/voice-designs/publish","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/voice-designs/publish","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/voice-designs/publish","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/voice-designs/publish","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/voice-designs/publish","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/voice-designs/publish","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/voice-designs/publish","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/voice-designs/publish","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/voice-designs/publish","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/voice-designs/publish","traceId":"request-id"}}}}}}},"/v1/admin/video/catalog":{"get":{"operationId":"adminListVideoCatalog","tags":["Admin"],"summary":"OpenRouter's video models (public GET /videos/models, cached ten minutes) with prices per second and the suggested credit rate. 503 when OpenRouter cannot be reached","description":"Requires admin permission models.read. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"refresh","in":"query","required":false,"schema":{"description":"Skip the ten-minute cache","type":"string","enum":["true","false"]}}],"security":[{"session":[]},{"apiKey":[]}],"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"items":{"type":"array","items":{"type":"object","properties":{"provider":{"type":"string","enum":["openrouter","google"],"description":"openrouter = through OpenRouter; google = Gemini API directly (Gemini Omni)"},"id":{"type":"string","description":"Model id: an OpenRouter id (e.g. google/veo-3.1-lite) or a Google one (gemini-omni-1.1-flash)"},"canonicalSlug":{"type":["string","null"]},"name":{"type":"string"},"description":{"type":"string"},"supportedDurations":{"type":"array","items":{"type":"number"}},"supportedResolutions":{"type":"array","items":{"type":"string"}},"supportedAspectRatios":{"type":"array","items":{"type":"string"}},"frameImages":{"type":"object","properties":{"first":{"type":"boolean"},"last":{"type":"boolean"}},"required":["first","last"]},"generateAudio":{"type":["boolean","null"]},"pricing":{"type":"object","properties":{"skus":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"string"},"description":"OpenRouter pricing SKUs as listed (USD, cents or per token)"},"usdPerSecond":{"type":"object","properties":{"720p":{"type":["number","null"]},"1080p":{"type":["number","null"]},"4k":{"type":["number","null"]}},"required":["720p","1080p","4k"],"description":"USD per second without audio at each resolution (null where the model does not render it or no price can be derived)"},"base":{"anyOf":[{"type":"object","properties":{"resolution":{"type":"string"},"usdPerSecond":{"type":"number"}},"required":["resolution","usdPerSecond"]},{"type":"null"}],"description":"The cost credits are suggested from: 720p, else the lowest resolution"},"estimated":{"type":"boolean","description":"Derived from video tokens (width × height × 24 fps ÷ 1024 per second), not a per-second SKU"},"note":{"type":["string","null"]}},"required":["skus","usdPerSecond","base","estimated","note"]},"allowedPassthroughParameters":{"type":"array","items":{"type":"string"}},"suggestedCreditsPerSecond":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}],"description":"ceil(base $/s × 2.5 ÷ $ per credit), at least 1"}},"required":["provider","id","canonicalSlug","name","description","supportedDurations","supportedResolutions","supportedAspectRatios","frameImages","generateAudio","pricing","allowedPassthroughParameters","suggestedCreditsPerSecond"]}},"nextCursor":{"type":"null"},"fetchedAt":{"type":"string"},"dollarsPerCredit":{"type":"number","description":"US dollars a credit sells for (cheapest top-up pack, else 0.0005)"},"targetMargin":{"type":"number"},"warningMargin":{"type":"number"}},"required":["items","nextCursor","fetchedAt","dollarsPerCredit","targetMargin","warningMargin"]},"example":{"items":[{"provider":"openrouter","id":"example","canonicalSlug":"example","name":"Noura","description":"example","supportedDurations":[1],"supportedResolutions":["example"],"supportedAspectRatios":["example"],"frameImages":{"first":true,"last":true},"generateAudio":"example","pricing":{"skus":{},"usdPerSecond":{"720p":"example","1080p":"example","4k":"example"},"base":{"resolution":"example","usdPerSecond":1},"estimated":true,"note":"example"},"allowedPassthroughParameters":["example"],"suggestedCreditsPerSecond":-9007199254740991}],"nextCursor":null,"fetchedAt":"2026-09-19T12:00:00.000Z","dollarsPerCredit":1,"targetMargin":1,"warningMargin":1}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/video/catalog","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/video/catalog","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/video/catalog","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/video/catalog","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/video/catalog","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/video/catalog","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/video/catalog","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/video/catalog","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/video/catalog","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/video/catalog","traceId":"request-id"}}}}}}},"/v1/admin/video/catalog/{modelId}":{"get":{"operationId":"adminGetVideoCatalogModel","tags":["Admin"],"summary":"One OpenRouter video model (URL-encode the id: google%2Fveo-3.1). 404 when it is not on OpenRouter","description":"Requires admin permission models.read. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"modelId","in":"path","required":true,"schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"provider":{"type":"string","enum":["openrouter","google"],"description":"openrouter = through OpenRouter; google = Gemini API directly (Gemini Omni)"},"id":{"type":"string","description":"Model id: an OpenRouter id (e.g. google/veo-3.1-lite) or a Google one (gemini-omni-1.1-flash)"},"canonicalSlug":{"type":["string","null"]},"name":{"type":"string"},"description":{"type":"string"},"supportedDurations":{"type":"array","items":{"type":"number"}},"supportedResolutions":{"type":"array","items":{"type":"string"}},"supportedAspectRatios":{"type":"array","items":{"type":"string"}},"frameImages":{"type":"object","properties":{"first":{"type":"boolean"},"last":{"type":"boolean"}},"required":["first","last"]},"generateAudio":{"type":["boolean","null"]},"pricing":{"type":"object","properties":{"skus":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"string"},"description":"OpenRouter pricing SKUs as listed (USD, cents or per token)"},"usdPerSecond":{"type":"object","properties":{"720p":{"type":["number","null"]},"1080p":{"type":["number","null"]},"4k":{"type":["number","null"]}},"required":["720p","1080p","4k"],"description":"USD per second without audio at each resolution (null where the model does not render it or no price can be derived)"},"base":{"anyOf":[{"type":"object","properties":{"resolution":{"type":"string"},"usdPerSecond":{"type":"number"}},"required":["resolution","usdPerSecond"]},{"type":"null"}],"description":"The cost credits are suggested from: 720p, else the lowest resolution"},"estimated":{"type":"boolean","description":"Derived from video tokens (width × height × 24 fps ÷ 1024 per second), not a per-second SKU"},"note":{"type":["string","null"]}},"required":["skus","usdPerSecond","base","estimated","note"]},"allowedPassthroughParameters":{"type":"array","items":{"type":"string"}},"suggestedCreditsPerSecond":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}],"description":"ceil(base $/s × 2.5 ÷ $ per credit), at least 1"}},"required":["provider","id","canonicalSlug","name","description","supportedDurations","supportedResolutions","supportedAspectRatios","frameImages","generateAudio","pricing","allowedPassthroughParameters","suggestedCreditsPerSecond"]},"example":{"provider":"openrouter","id":"example","canonicalSlug":"example","name":"Noura","description":"example","supportedDurations":[1],"supportedResolutions":["example"],"supportedAspectRatios":["example"],"frameImages":{"first":true,"last":true},"generateAudio":"example","pricing":{"skus":{},"usdPerSecond":{"720p":"example","1080p":"example","4k":"example"},"base":{"resolution":"example","usdPerSecond":1},"estimated":true,"note":"example"},"allowedPassthroughParameters":["example"],"suggestedCreditsPerSecond":-9007199254740991}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/video/catalog/{modelId}","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/video/catalog/{modelId}","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/video/catalog/{modelId}","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/video/catalog/{modelId}","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/video/catalog/{modelId}","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/video/catalog/{modelId}","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/video/catalog/{modelId}","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/video/catalog/{modelId}","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/video/catalog/{modelId}","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/video/catalog/{modelId}","traceId":"request-id"}}}}}}},"/v1/admin/video/models":{"get":{"operationId":"adminListVideoModels","tags":["Admin"],"summary":"Vocla video tiers with their OpenRouter model and live status, cost and margin per second, and the plans that include them","description":"Requires admin permission models.read. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false}],"security":[{"session":[]},{"apiKey":[]}],"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"items":{"type":"array","items":{"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":"Product model id"},"slug":{"type":"string","description":"Tier slug plans list in entitlements.videoTiers"},"name":{"type":"object","properties":{"ar":{"type":"string","minLength":1},"en":{"type":"string","minLength":1}},"required":["ar","en"]},"description":{"anyOf":[{"type":"object","properties":{"ar":{"type":"string","minLength":1},"en":{"type":"string","minLength":1}},"required":["ar","en"]},{"type":"null"}]},"creditsPerSecond":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"enabled":{"type":"boolean"},"order":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"defaultResolution":{"type":["string","null"]},"openRouter":{"type":"object","properties":{"provider":{"type":"string","enum":["openrouter","google"],"description":"openrouter = through OpenRouter; google = Gemini API directly (Gemini Omni)"},"model":{"description":"providerModel of the primary video binding (used at render time), on OpenRouter or Google","type":["string","null"]},"bindingId":{"anyOf":[{"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)$"},{"type":"null"}]},"enabled":{"type":"boolean"},"weight":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"status":{"type":"string","enum":["exists","missing","unknown"],"description":"unknown = the OpenRouter catalog could not be read"},"lastError":{"anyOf":[{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"status":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"at":{"type":"string"}},"required":["code","message","status","at"]},{"type":"null"}],"description":"The last error that said this model cannot be used (OpenRouter 404 \"no allowed providers\" from the account settings, model unavailable), recorded from a real submit; cleared by the next success or a model change"}},"required":["provider","model","bindingId","enabled","weight","status","lastError"]},"fallback":{"anyOf":[{"type":"object","properties":{"provider":{"type":"string","enum":["openrouter","google"],"description":"openrouter = through OpenRouter; google = Gemini API directly (Gemini Omni)"},"model":{"type":"string","description":"providerModel of the fallback binding (data.role=fallback)"},"bindingId":{"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)$"},"enabled":{"type":"boolean"},"weight":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"priority":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"status":{"type":"string","enum":["exists","missing","unknown"]},"capabilities":{"anyOf":[{"type":"object","properties":{"durations":{"type":"array","items":{"type":"number"}},"resolutions":{"type":"array","items":{"type":"string"}},"aspectRatios":{"type":"array","items":{"type":"string"}},"frameImages":{"type":"object","properties":{"first":{"type":"boolean"},"last":{"type":"boolean"}},"required":["first","last"]}},"required":["durations","resolutions","aspectRatios","frameImages"]},{"type":"null"}]},"usdPerSecond":{"type":["number","null"]},"costResolution":{"type":["string","null"]},"costEstimated":{"type":"boolean"},"margin":{"description":"creditsPerSecond × dollarsPerCredit ÷ the fallback cost per second","type":["number","null"]},"marginWarning":{"type":"boolean"},"lastError":{"anyOf":[{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"status":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"at":{"type":"string"}},"required":["code","message","status","at"]},{"type":"null"}],"description":"The last error that said this model cannot be used (OpenRouter 404 \"no allowed providers\" from the account settings, model unavailable), recorded from a real submit; cleared by the next success or a model change"}},"required":["provider","model","bindingId","enabled","weight","priority","status","capabilities","usdPerSecond","costResolution","costEstimated","margin","marginWarning","lastError"]},{"type":"null"}],"description":"The model a scene is rendered by when the primary fails (docs/VIDEO_GENERATION.md \"Fallback models\")"},"fallbacksUsed7d":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Scenes the fallback model took in the last seven days (provider_calls role fallback)"},"capabilities":{"anyOf":[{"type":"object","properties":{"durations":{"type":"array","items":{"type":"number"}},"resolutions":{"type":"array","items":{"type":"string"}},"aspectRatios":{"type":"array","items":{"type":"string"}},"frameImages":{"type":"object","properties":{"first":{"type":"boolean"},"last":{"type":"boolean"}},"required":["first","last"]}},"required":["durations","resolutions","aspectRatios","frameImages"]},{"type":"null"}],"description":"Live from the catalog, else the snapshot taken when the model was chosen"},"usdPerSecond":{"description":"Provider cost per second (720p, else the lowest resolution), without audio","type":["number","null"]},"costResolution":{"type":["string","null"]},"costEstimated":{"type":"boolean"},"margin":{"description":"creditsPerSecond × dollarsPerCredit ÷ usdPerSecond","type":["number","null"]},"marginWarning":{"type":"boolean","description":"Margin below warningMargin"},"suggestedCreditsPerSecond":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"plans":{"type":"array","items":{"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)$"},"slug":{"type":"string"},"name":{"type":"object","properties":{"ar":{"type":"string","minLength":1},"en":{"type":"string","minLength":1}},"required":["ar","en"]}},"required":["id","slug","name"]},"description":"Plans whose entitlements.videoTiers include this tier"},"renderingProjects":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}},"required":["id","slug","name","description","creditsPerSecond","enabled","order","defaultResolution","openRouter","fallback","fallbacksUsed7d","capabilities","usdPerSecond","costResolution","costEstimated","margin","marginWarning","suggestedCreditsPerSecond","plans","renderingProjects"]}},"nextCursor":{"type":"null"},"catalogAvailable":{"type":"boolean"},"catalogFetchedAt":{"type":["string","null"]},"openRouterConfigured":{"type":"boolean","description":"OPENROUTER_API_KEY is set (new models route to OpenRouter; else to the mock provider)"},"googleConfigured":{"type":"boolean","description":"GEMINI_API_KEY is set (Gemini Omni routes can render)"},"dollarsPerCredit":{"type":"number","description":"US dollars a credit sells for (cheapest top-up pack, else 0.0005)"},"targetMargin":{"type":"number"},"warningMargin":{"type":"number"}},"required":["items","nextCursor","catalogAvailable","catalogFetchedAt","openRouterConfigured","googleConfigured","dollarsPerCredit","targetMargin","warningMargin"]},"example":{"items":[{"id":"01990000-0000-7000-8000-000000000001","slug":"example","name":{"ar":"مثال","en":"example"},"description":{"ar":"مثال","en":"example"},"creditsPerSecond":-9007199254740991,"enabled":true,"order":-9007199254740991,"defaultResolution":"example","openRouter":{"provider":"openrouter","model":"example","bindingId":"01990000-0000-7000-8000-000000000001","enabled":true,"weight":-9007199254740991,"status":"exists","lastError":{"code":"example","message":"example","status":-9007199254740991,"at":"example"}},"fallback":{"provider":"openrouter","model":"example","bindingId":"01990000-0000-7000-8000-000000000001","enabled":true,"weight":-9007199254740991,"priority":-9007199254740991,"status":"exists","capabilities":{"durations":[1],"resolutions":["example"],"aspectRatios":["example"],"frameImages":{"first":true,"last":true}},"usdPerSecond":"example","costResolution":"example","costEstimated":true,"margin":"example","marginWarning":true,"lastError":{"code":"example","message":"example","status":-9007199254740991,"at":"example"}},"fallbacksUsed7d":-9007199254740991,"capabilities":{"durations":[1],"resolutions":["example"],"aspectRatios":["example"],"frameImages":{"first":true,"last":true}},"usdPerSecond":"example","costResolution":"example","costEstimated":true,"margin":"example","marginWarning":true,"suggestedCreditsPerSecond":-9007199254740991,"plans":[{"id":"01990000-0000-7000-8000-000000000001","slug":"example","name":{"ar":"مثال","en":"example"}}],"renderingProjects":-9007199254740991}],"nextCursor":null,"catalogAvailable":true,"catalogFetchedAt":"2026-09-19T12:00:00.000Z","openRouterConfigured":true,"googleConfigured":true,"dollarsPerCredit":1,"targetMargin":1,"warningMargin":1}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/video/models","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/video/models","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/video/models","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/video/models","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/video/models","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/video/models","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/video/models","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/video/models","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/video/models","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/video/models","traceId":"request-id"}}}}}},"post":{"operationId":"adminCreateVideoModel","tags":["Admin"],"summary":"Add a video tier for an OpenRouter model (422 openRouterModel/not_found when OpenRouter does not list it): a product model, its OpenRouter and mock video routes and storyboard image routes, and the chosen plans","description":"Requires admin permission models.write. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"X-CSRF-Token","in":"header","required":false,"description":"Required for cookie-authenticated mutations; returned by sign-in/sign-up.","schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"openRouterModel":{"type":"string","minLength":3,"maxLength":200,"description":"OpenRouter model id; checked against the catalog (422 openRouterModel/not_found)"},"fallbackModel":{"description":"OpenRouter model a scene falls back to when the primary fails; checked against the catalog (422 fallbackModel/not_found, fallbackModel/same_as_primary); null clears it","anyOf":[{"type":"string","minLength":3,"maxLength":200},{"type":"null"}]},"slug":{"description":"Default: vid- + the model id","type":"string","pattern":"^vid-[a-z0-9][a-z0-9-]{0,95}$"},"name":{"type":"object","properties":{"ar":{"type":"string","minLength":1},"en":{"type":"string","minLength":1}},"required":["ar","en"]},"description":{"type":"object","properties":{"ar":{"type":"string","minLength":1},"en":{"type":"string","minLength":1}},"required":["ar","en"]},"creditsPerSecond":{"description":"Default: the suggested rate (ceil(cost × 2.5 ÷ $ per credit))","type":"integer","minimum":1,"maximum":1000000},"defaultResolution":{"anyOf":[{"type":"string","maxLength":10},{"type":"null"}]},"enabled":{"default":true,"type":"boolean"},"plans":{"maxItems":20,"type":"array","items":{"type":"string","minLength":1,"maxLength":100},"description":"Plan slugs whose entitlements.videoTiers should include this tier (the others drop it); needs billing.write"}},"required":["openRouterModel","name"]},"example":{"openRouterModel":"example","fallbackModel":"example","slug":"example","name":{"ar":"مثال","en":"example"},"description":{"ar":"مثال","en":"example"},"creditsPerSecond":1,"defaultResolution":"example","enabled":true,"plans":["example"]}}}},"responses":{"201":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","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":"Product model id"},"slug":{"type":"string","description":"Tier slug plans list in entitlements.videoTiers"},"name":{"type":"object","properties":{"ar":{"type":"string","minLength":1},"en":{"type":"string","minLength":1}},"required":["ar","en"]},"description":{"anyOf":[{"type":"object","properties":{"ar":{"type":"string","minLength":1},"en":{"type":"string","minLength":1}},"required":["ar","en"]},{"type":"null"}]},"creditsPerSecond":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"enabled":{"type":"boolean"},"order":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"defaultResolution":{"type":["string","null"]},"openRouter":{"type":"object","properties":{"provider":{"type":"string","enum":["openrouter","google"],"description":"openrouter = through OpenRouter; google = Gemini API directly (Gemini Omni)"},"model":{"description":"providerModel of the primary video binding (used at render time), on OpenRouter or Google","type":["string","null"]},"bindingId":{"anyOf":[{"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)$"},{"type":"null"}]},"enabled":{"type":"boolean"},"weight":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"status":{"type":"string","enum":["exists","missing","unknown"],"description":"unknown = the OpenRouter catalog could not be read"},"lastError":{"anyOf":[{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"status":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"at":{"type":"string"}},"required":["code","message","status","at"]},{"type":"null"}],"description":"The last error that said this model cannot be used (OpenRouter 404 \"no allowed providers\" from the account settings, model unavailable), recorded from a real submit; cleared by the next success or a model change"}},"required":["provider","model","bindingId","enabled","weight","status","lastError"]},"fallback":{"anyOf":[{"type":"object","properties":{"provider":{"type":"string","enum":["openrouter","google"],"description":"openrouter = through OpenRouter; google = Gemini API directly (Gemini Omni)"},"model":{"type":"string","description":"providerModel of the fallback binding (data.role=fallback)"},"bindingId":{"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)$"},"enabled":{"type":"boolean"},"weight":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"priority":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"status":{"type":"string","enum":["exists","missing","unknown"]},"capabilities":{"anyOf":[{"type":"object","properties":{"durations":{"type":"array","items":{"type":"number"}},"resolutions":{"type":"array","items":{"type":"string"}},"aspectRatios":{"type":"array","items":{"type":"string"}},"frameImages":{"type":"object","properties":{"first":{"type":"boolean"},"last":{"type":"boolean"}},"required":["first","last"]}},"required":["durations","resolutions","aspectRatios","frameImages"]},{"type":"null"}]},"usdPerSecond":{"type":["number","null"]},"costResolution":{"type":["string","null"]},"costEstimated":{"type":"boolean"},"margin":{"description":"creditsPerSecond × dollarsPerCredit ÷ the fallback cost per second","type":["number","null"]},"marginWarning":{"type":"boolean"},"lastError":{"anyOf":[{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"status":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"at":{"type":"string"}},"required":["code","message","status","at"]},{"type":"null"}],"description":"The last error that said this model cannot be used (OpenRouter 404 \"no allowed providers\" from the account settings, model unavailable), recorded from a real submit; cleared by the next success or a model change"}},"required":["provider","model","bindingId","enabled","weight","priority","status","capabilities","usdPerSecond","costResolution","costEstimated","margin","marginWarning","lastError"]},{"type":"null"}],"description":"The model a scene is rendered by when the primary fails (docs/VIDEO_GENERATION.md \"Fallback models\")"},"fallbacksUsed7d":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Scenes the fallback model took in the last seven days (provider_calls role fallback)"},"capabilities":{"anyOf":[{"type":"object","properties":{"durations":{"type":"array","items":{"type":"number"}},"resolutions":{"type":"array","items":{"type":"string"}},"aspectRatios":{"type":"array","items":{"type":"string"}},"frameImages":{"type":"object","properties":{"first":{"type":"boolean"},"last":{"type":"boolean"}},"required":["first","last"]}},"required":["durations","resolutions","aspectRatios","frameImages"]},{"type":"null"}],"description":"Live from the catalog, else the snapshot taken when the model was chosen"},"usdPerSecond":{"description":"Provider cost per second (720p, else the lowest resolution), without audio","type":["number","null"]},"costResolution":{"type":["string","null"]},"costEstimated":{"type":"boolean"},"margin":{"description":"creditsPerSecond × dollarsPerCredit ÷ usdPerSecond","type":["number","null"]},"marginWarning":{"type":"boolean","description":"Margin below warningMargin"},"suggestedCreditsPerSecond":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"plans":{"type":"array","items":{"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)$"},"slug":{"type":"string"},"name":{"type":"object","properties":{"ar":{"type":"string","minLength":1},"en":{"type":"string","minLength":1}},"required":["ar","en"]}},"required":["id","slug","name"]},"description":"Plans whose entitlements.videoTiers include this tier"},"renderingProjects":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}},"required":["id","slug","name","description","creditsPerSecond","enabled","order","defaultResolution","openRouter","fallback","fallbacksUsed7d","capabilities","usdPerSecond","costResolution","costEstimated","margin","marginWarning","suggestedCreditsPerSecond","plans","renderingProjects"]},"example":{"id":"01990000-0000-7000-8000-000000000001","slug":"example","name":{"ar":"مثال","en":"example"},"description":{"ar":"مثال","en":"example"},"creditsPerSecond":-9007199254740991,"enabled":true,"order":-9007199254740991,"defaultResolution":"example","openRouter":{"provider":"openrouter","model":"example","bindingId":"01990000-0000-7000-8000-000000000001","enabled":true,"weight":-9007199254740991,"status":"exists","lastError":{"code":"example","message":"example","status":-9007199254740991,"at":"example"}},"fallback":{"provider":"openrouter","model":"example","bindingId":"01990000-0000-7000-8000-000000000001","enabled":true,"weight":-9007199254740991,"priority":-9007199254740991,"status":"exists","capabilities":{"durations":[1],"resolutions":["example"],"aspectRatios":["example"],"frameImages":{"first":true,"last":true}},"usdPerSecond":"example","costResolution":"example","costEstimated":true,"margin":"example","marginWarning":true,"lastError":{"code":"example","message":"example","status":-9007199254740991,"at":"example"}},"fallbacksUsed7d":-9007199254740991,"capabilities":{"durations":[1],"resolutions":["example"],"aspectRatios":["example"],"frameImages":{"first":true,"last":true}},"usdPerSecond":"example","costResolution":"example","costEstimated":true,"margin":"example","marginWarning":true,"suggestedCreditsPerSecond":-9007199254740991,"plans":[{"id":"01990000-0000-7000-8000-000000000001","slug":"example","name":{"ar":"مثال","en":"example"}}],"renderingProjects":-9007199254740991}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/video/models","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/video/models","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/video/models","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/video/models","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/video/models","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/video/models","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/video/models","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/video/models","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/video/models","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/video/models","traceId":"request-id"}}}}}}},"/v1/admin/video/models/{id}":{"patch":{"operationId":"adminUpdateVideoModel","tags":["Admin"],"summary":"Rename, reprice, switch on/off, change plans or switch the OpenRouter model (checked again; the binding providerModel is swapped)","description":"Requires admin permission models.write. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"X-CSRF-Token","in":"header","required":false,"description":"Required for cookie-authenticated mutations; returned by sign-in/sign-up.","schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"openRouterModel":{"description":"Switch the OpenRouter model (checked again; 422 openRouterModel/same_as_fallback when it is the fallback); renders use it from the next scene","type":"string","minLength":3,"maxLength":200},"fallbackModel":{"description":"OpenRouter model a scene falls back to when the primary fails; checked against the catalog (422 fallbackModel/not_found, fallbackModel/same_as_primary); null clears it","anyOf":[{"type":"string","minLength":3,"maxLength":200},{"type":"null"}]},"name":{"type":"object","properties":{"ar":{"type":"string","minLength":1},"en":{"type":"string","minLength":1}},"required":["ar","en"]},"description":{"type":"object","properties":{"ar":{"type":"string","minLength":1},"en":{"type":"string","minLength":1}},"required":["ar","en"]},"creditsPerSecond":{"type":"integer","minimum":1,"maximum":1000000},"defaultResolution":{"anyOf":[{"type":"string","maxLength":10},{"type":"null"}]},"enabled":{"type":"boolean"},"plans":{"maxItems":20,"type":"array","items":{"type":"string","minLength":1,"maxLength":100},"description":"Plan slugs whose entitlements.videoTiers should include this tier (the others drop it); needs billing.write"}}},"example":{"openRouterModel":"example","fallbackModel":"example","name":{"ar":"مثال","en":"example"},"description":{"ar":"مثال","en":"example"},"creditsPerSecond":1,"defaultResolution":"example","enabled":true,"plans":["example"]}}}},"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","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":"Product model id"},"slug":{"type":"string","description":"Tier slug plans list in entitlements.videoTiers"},"name":{"type":"object","properties":{"ar":{"type":"string","minLength":1},"en":{"type":"string","minLength":1}},"required":["ar","en"]},"description":{"anyOf":[{"type":"object","properties":{"ar":{"type":"string","minLength":1},"en":{"type":"string","minLength":1}},"required":["ar","en"]},{"type":"null"}]},"creditsPerSecond":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"enabled":{"type":"boolean"},"order":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"defaultResolution":{"type":["string","null"]},"openRouter":{"type":"object","properties":{"provider":{"type":"string","enum":["openrouter","google"],"description":"openrouter = through OpenRouter; google = Gemini API directly (Gemini Omni)"},"model":{"description":"providerModel of the primary video binding (used at render time), on OpenRouter or Google","type":["string","null"]},"bindingId":{"anyOf":[{"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)$"},{"type":"null"}]},"enabled":{"type":"boolean"},"weight":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"status":{"type":"string","enum":["exists","missing","unknown"],"description":"unknown = the OpenRouter catalog could not be read"},"lastError":{"anyOf":[{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"status":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"at":{"type":"string"}},"required":["code","message","status","at"]},{"type":"null"}],"description":"The last error that said this model cannot be used (OpenRouter 404 \"no allowed providers\" from the account settings, model unavailable), recorded from a real submit; cleared by the next success or a model change"}},"required":["provider","model","bindingId","enabled","weight","status","lastError"]},"fallback":{"anyOf":[{"type":"object","properties":{"provider":{"type":"string","enum":["openrouter","google"],"description":"openrouter = through OpenRouter; google = Gemini API directly (Gemini Omni)"},"model":{"type":"string","description":"providerModel of the fallback binding (data.role=fallback)"},"bindingId":{"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)$"},"enabled":{"type":"boolean"},"weight":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"priority":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"status":{"type":"string","enum":["exists","missing","unknown"]},"capabilities":{"anyOf":[{"type":"object","properties":{"durations":{"type":"array","items":{"type":"number"}},"resolutions":{"type":"array","items":{"type":"string"}},"aspectRatios":{"type":"array","items":{"type":"string"}},"frameImages":{"type":"object","properties":{"first":{"type":"boolean"},"last":{"type":"boolean"}},"required":["first","last"]}},"required":["durations","resolutions","aspectRatios","frameImages"]},{"type":"null"}]},"usdPerSecond":{"type":["number","null"]},"costResolution":{"type":["string","null"]},"costEstimated":{"type":"boolean"},"margin":{"description":"creditsPerSecond × dollarsPerCredit ÷ the fallback cost per second","type":["number","null"]},"marginWarning":{"type":"boolean"},"lastError":{"anyOf":[{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"status":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"at":{"type":"string"}},"required":["code","message","status","at"]},{"type":"null"}],"description":"The last error that said this model cannot be used (OpenRouter 404 \"no allowed providers\" from the account settings, model unavailable), recorded from a real submit; cleared by the next success or a model change"}},"required":["provider","model","bindingId","enabled","weight","priority","status","capabilities","usdPerSecond","costResolution","costEstimated","margin","marginWarning","lastError"]},{"type":"null"}],"description":"The model a scene is rendered by when the primary fails (docs/VIDEO_GENERATION.md \"Fallback models\")"},"fallbacksUsed7d":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Scenes the fallback model took in the last seven days (provider_calls role fallback)"},"capabilities":{"anyOf":[{"type":"object","properties":{"durations":{"type":"array","items":{"type":"number"}},"resolutions":{"type":"array","items":{"type":"string"}},"aspectRatios":{"type":"array","items":{"type":"string"}},"frameImages":{"type":"object","properties":{"first":{"type":"boolean"},"last":{"type":"boolean"}},"required":["first","last"]}},"required":["durations","resolutions","aspectRatios","frameImages"]},{"type":"null"}],"description":"Live from the catalog, else the snapshot taken when the model was chosen"},"usdPerSecond":{"description":"Provider cost per second (720p, else the lowest resolution), without audio","type":["number","null"]},"costResolution":{"type":["string","null"]},"costEstimated":{"type":"boolean"},"margin":{"description":"creditsPerSecond × dollarsPerCredit ÷ usdPerSecond","type":["number","null"]},"marginWarning":{"type":"boolean","description":"Margin below warningMargin"},"suggestedCreditsPerSecond":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"plans":{"type":"array","items":{"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)$"},"slug":{"type":"string"},"name":{"type":"object","properties":{"ar":{"type":"string","minLength":1},"en":{"type":"string","minLength":1}},"required":["ar","en"]}},"required":["id","slug","name"]},"description":"Plans whose entitlements.videoTiers include this tier"},"renderingProjects":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}},"required":["id","slug","name","description","creditsPerSecond","enabled","order","defaultResolution","openRouter","fallback","fallbacksUsed7d","capabilities","usdPerSecond","costResolution","costEstimated","margin","marginWarning","suggestedCreditsPerSecond","plans","renderingProjects"]},"example":{"id":"01990000-0000-7000-8000-000000000001","slug":"example","name":{"ar":"مثال","en":"example"},"description":{"ar":"مثال","en":"example"},"creditsPerSecond":-9007199254740991,"enabled":true,"order":-9007199254740991,"defaultResolution":"example","openRouter":{"provider":"openrouter","model":"example","bindingId":"01990000-0000-7000-8000-000000000001","enabled":true,"weight":-9007199254740991,"status":"exists","lastError":{"code":"example","message":"example","status":-9007199254740991,"at":"example"}},"fallback":{"provider":"openrouter","model":"example","bindingId":"01990000-0000-7000-8000-000000000001","enabled":true,"weight":-9007199254740991,"priority":-9007199254740991,"status":"exists","capabilities":{"durations":[1],"resolutions":["example"],"aspectRatios":["example"],"frameImages":{"first":true,"last":true}},"usdPerSecond":"example","costResolution":"example","costEstimated":true,"margin":"example","marginWarning":true,"lastError":{"code":"example","message":"example","status":-9007199254740991,"at":"example"}},"fallbacksUsed7d":-9007199254740991,"capabilities":{"durations":[1],"resolutions":["example"],"aspectRatios":["example"],"frameImages":{"first":true,"last":true}},"usdPerSecond":"example","costResolution":"example","costEstimated":true,"margin":"example","marginWarning":true,"suggestedCreditsPerSecond":-9007199254740991,"plans":[{"id":"01990000-0000-7000-8000-000000000001","slug":"example","name":{"ar":"مثال","en":"example"}}],"renderingProjects":-9007199254740991}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/video/models/{id}","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/video/models/{id}","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/video/models/{id}","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/video/models/{id}","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/video/models/{id}","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/video/models/{id}","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/video/models/{id}","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/video/models/{id}","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/video/models/{id}","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/video/models/{id}","traceId":"request-id"}}}}}},"delete":{"operationId":"adminDeleteVideoModel","tags":["Admin"],"summary":"Archive a video tier: switched off and removed from every plan. 409 while a project is rendering with it","description":"Requires admin permission models.write. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"X-CSRF-Token","in":"header","required":false,"description":"Required for cookie-authenticated mutations; returned by sign-in/sign-up.","schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"ok":{"type":"boolean"}},"required":["ok"]},"example":{"ok":true}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/video/models/{id}","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/video/models/{id}","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/video/models/{id}","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/video/models/{id}","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/video/models/{id}","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/video/models/{id}","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/video/models/{id}","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/video/models/{id}","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/video/models/{id}","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/video/models/{id}","traceId":"request-id"}}}}}}},"/v1/admin/image/models":{"get":{"operationId":"adminListImageModels","tags":["Admin"],"summary":"Image tiers with their OpenRouter primary and fallback models, live status, cost per image and margin per size, the plans that include them, the catalog for pickers and the tool prices","description":"Requires admin permission models.read. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false}],"security":[{"session":[]},{"apiKey":[]}],"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"items":{"type":"array","items":{"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":"Product model id"},"slug":{"type":"string","description":"Tier slug plans list in entitlements.imageTiers"},"name":{"type":"object","properties":{"ar":{"type":"string","minLength":1},"en":{"type":"string","minLength":1}},"required":["ar","en"]},"description":{"anyOf":[{"type":"object","properties":{"ar":{"type":"string","minLength":1},"en":{"type":"string","minLength":1}},"required":["ar","en"]},{"type":"null"}]},"enabled":{"type":"boolean"},"order":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"credits":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Credits per image at 1K (credit_rate)"},"resolutions":{"type":"array","items":{"type":"string","enum":["1K","2K","4K"],"description":"Long side about 1,000, 2,000 or 4,000 pixels"}},"resolutionCredits":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"description":"Credits per image at the larger sizes the tier offers (2K, 4K)"},"referenceCredits":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Credits added per reference photo per image"},"maxReferences":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"transparent":{"type":"boolean"},"primary":{"anyOf":[{"type":"object","properties":{"model":{"type":"string","description":"providerModel of the OpenRouter image binding"},"bindingId":{"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)$"},"enabled":{"type":"boolean"},"weight":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"priority":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"status":{"type":"string","enum":["exists","missing","unknown"],"description":"unknown = the OpenRouter catalog could not be read"},"quality":{"description":"The quality after the colon, if any","type":["string","null"]},"capabilities":{"anyOf":[{"type":"object","properties":{"id":{"type":"string","description":"OpenRouter image model id (a binding may add the quality after a colon: openai/gpt-image-2.5-sunburst:high)"},"canonicalSlug":{"type":["string","null"]},"name":{"type":"string"},"resolutions":{"type":"array","items":{"type":"string"},"description":"Values of its resolution parameter (empty = not listed)"},"aspectRatios":{"type":"array","items":{"type":"string"}},"qualities":{"type":"array","items":{"type":"string"}},"transparent":{"type":"boolean","description":"Takes background: transparent"},"maxReferences":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}],"description":"input_references max, null when not listed"},"parameters":{"type":"array","items":{"type":"string"},"description":"Every parameter it lists"}},"required":["id","canonicalSlug","name","resolutions","aspectRatios","qualities","transparent","maxReferences","parameters"]},{"type":"null"}],"description":"Live from the catalog"},"unsupportedResolutions":{"type":"array","items":{"type":"string"},"description":"Sizes the tier sells that the model does not list (it is asked anyway; shown as a warning)"},"costPerImageUsd":{"description":"binding data.costPerUnitUsd: what one image costs (OpenRouter lists no image prices)","type":["number","null"]},"margins":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":["number","null"]},"description":"Per size the tier offers: its credits × dollarsPerCredit ÷ costPerImageUsd (null without a cost)"},"marginWarning":{"type":"boolean","description":"A margin below warningMargin"},"lastError":{"anyOf":[{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"status":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"at":{"type":"string"}},"required":["code","message","status","at"]},{"type":"null"}],"description":"The last error that said this model cannot be used (OpenRouter 404 \"no allowed providers\" from the account settings, model unavailable), recorded from a real submit; cleared by the next success or a model change"}},"required":["model","bindingId","enabled","weight","priority","status","quality","capabilities","unsupportedResolutions","costPerImageUsd","margins","marginWarning","lastError"]},{"type":"null"}]},"fallback":{"anyOf":[{"type":"object","properties":{"model":{"type":"string","description":"providerModel of the OpenRouter image binding"},"bindingId":{"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)$"},"enabled":{"type":"boolean"},"weight":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"priority":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"status":{"type":"string","enum":["exists","missing","unknown"],"description":"unknown = the OpenRouter catalog could not be read"},"quality":{"description":"The quality after the colon, if any","type":["string","null"]},"capabilities":{"anyOf":[{"type":"object","properties":{"id":{"type":"string","description":"OpenRouter image model id (a binding may add the quality after a colon: openai/gpt-image-2.5-sunburst:high)"},"canonicalSlug":{"type":["string","null"]},"name":{"type":"string"},"resolutions":{"type":"array","items":{"type":"string"},"description":"Values of its resolution parameter (empty = not listed)"},"aspectRatios":{"type":"array","items":{"type":"string"}},"qualities":{"type":"array","items":{"type":"string"}},"transparent":{"type":"boolean","description":"Takes background: transparent"},"maxReferences":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}],"description":"input_references max, null when not listed"},"parameters":{"type":"array","items":{"type":"string"},"description":"Every parameter it lists"}},"required":["id","canonicalSlug","name","resolutions","aspectRatios","qualities","transparent","maxReferences","parameters"]},{"type":"null"}],"description":"Live from the catalog"},"unsupportedResolutions":{"type":"array","items":{"type":"string"},"description":"Sizes the tier sells that the model does not list (it is asked anyway; shown as a warning)"},"costPerImageUsd":{"description":"binding data.costPerUnitUsd: what one image costs (OpenRouter lists no image prices)","type":["number","null"]},"margins":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":["number","null"]},"description":"Per size the tier offers: its credits × dollarsPerCredit ÷ costPerImageUsd (null without a cost)"},"marginWarning":{"type":"boolean","description":"A margin below warningMargin"},"lastError":{"anyOf":[{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"status":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"at":{"type":"string"}},"required":["code","message","status","at"]},{"type":"null"}],"description":"The last error that said this model cannot be used (OpenRouter 404 \"no allowed providers\" from the account settings, model unavailable), recorded from a real submit; cleared by the next success or a model change"}},"required":["model","bindingId","enabled","weight","priority","status","quality","capabilities","unsupportedResolutions","costPerImageUsd","margins","marginWarning","lastError"]},{"type":"null"}],"description":"The model an image is made by when the primary fails (data.role=fallback, priority 50)"},"plans":{"type":"array","items":{"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)$"},"slug":{"type":"string"},"name":{"type":"object","properties":{"ar":{"type":"string","minLength":1},"en":{"type":"string","minLength":1}},"required":["ar","en"]}},"required":["id","slug","name"]},"description":"Plans whose entitlements.imageTiers include this tier"}},"required":["id","slug","name","description","enabled","order","credits","resolutions","resolutionCredits","referenceCredits","maxReferences","transparent","primary","fallback","plans"]}},"nextCursor":{"type":"null"},"catalogAvailable":{"type":"boolean"},"catalogFetchedAt":{"type":["string","null"]},"catalogError":{"type":["string","null"]},"openRouterConfigured":{"type":"boolean","description":"OPENROUTER_API_KEY is set"},"dollarsPerCredit":{"type":"number","description":"US dollars a credit sells for (cheapest top-up pack, else 0.0005)"},"targetMargin":{"type":"number"},"warningMargin":{"type":"number"},"catalog":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"OpenRouter image model id (a binding may add the quality after a colon: openai/gpt-image-2.5-sunburst:high)"},"canonicalSlug":{"type":["string","null"]},"name":{"type":"string"},"resolutions":{"type":"array","items":{"type":"string"},"description":"Values of its resolution parameter (empty = not listed)"},"aspectRatios":{"type":"array","items":{"type":"string"}},"qualities":{"type":"array","items":{"type":"string"}},"transparent":{"type":"boolean","description":"Takes background: transparent"},"maxReferences":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}],"description":"input_references max, null when not listed"},"parameters":{"type":"array","items":{"type":"string"},"description":"Every parameter it lists"}},"required":["id","canonicalSlug","name","resolutions","aspectRatios","qualities","transparent","maxReferences","parameters"]},"description":"OpenRouter image models for the pickers (empty when the catalog is unavailable)"},"tools":{"type":"array","items":{"type":"object","properties":{"tool":{"type":"string","enum":["remove-background","enhance"]},"tier":{"type":"string","description":"The tier whose route makes it"},"resolutionCredits":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"description":"Default credits per image by size (TOOL_CREDITS)"}},"required":["tool","tier","resolutionCredits"]},"description":"One-click tool prices (read-only defaults)"},"toolsNote":{"type":"string"}},"required":["items","nextCursor","catalogAvailable","catalogFetchedAt","catalogError","openRouterConfigured","dollarsPerCredit","targetMargin","warningMargin","catalog","tools","toolsNote"]},"example":{"items":[{"id":"01990000-0000-7000-8000-000000000001","slug":"example","name":{"ar":"مثال","en":"example"},"description":{"ar":"مثال","en":"example"},"enabled":true,"order":-9007199254740991,"credits":-9007199254740991,"resolutions":["1K"],"resolutionCredits":{},"referenceCredits":-9007199254740991,"maxReferences":-9007199254740991,"transparent":true,"primary":{"model":"example","bindingId":"01990000-0000-7000-8000-000000000001","enabled":true,"weight":-9007199254740991,"priority":-9007199254740991,"status":"exists","quality":"example","capabilities":{"id":"example","canonicalSlug":"example","name":"Noura","resolutions":["example"],"aspectRatios":["example"],"qualities":["example"],"transparent":true,"maxReferences":-9007199254740991,"parameters":["example"]},"unsupportedResolutions":["example"],"costPerImageUsd":"example","margins":{},"marginWarning":true,"lastError":{"code":"example","message":"example","status":-9007199254740991,"at":"example"}},"fallback":{"model":"example","bindingId":"01990000-0000-7000-8000-000000000001","enabled":true,"weight":-9007199254740991,"priority":-9007199254740991,"status":"exists","quality":"example","capabilities":{"id":"example","canonicalSlug":"example","name":"Noura","resolutions":["example"],"aspectRatios":["example"],"qualities":["example"],"transparent":true,"maxReferences":-9007199254740991,"parameters":["example"]},"unsupportedResolutions":["example"],"costPerImageUsd":"example","margins":{},"marginWarning":true,"lastError":{"code":"example","message":"example","status":-9007199254740991,"at":"example"}},"plans":[{"id":"01990000-0000-7000-8000-000000000001","slug":"example","name":{"ar":"مثال","en":"example"}}]}],"nextCursor":null,"catalogAvailable":true,"catalogFetchedAt":"2026-09-19T12:00:00.000Z","catalogError":"example","openRouterConfigured":true,"dollarsPerCredit":1,"targetMargin":1,"warningMargin":1,"catalog":[{"id":"example","canonicalSlug":"example","name":"Noura","resolutions":["example"],"aspectRatios":["example"],"qualities":["example"],"transparent":true,"maxReferences":-9007199254740991,"parameters":["example"]}],"tools":[{"tool":"remove-background","tier":"example","resolutionCredits":{}}],"toolsNote":"example"}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/image/models","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/image/models","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/image/models","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/image/models","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/image/models","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/image/models","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/image/models","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/image/models","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/image/models","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/image/models","traceId":"request-id"}}}}}}},"/v1/admin/image/models/{id}":{"patch":{"operationId":"adminUpdateImageModel","tags":["Admin"],"summary":"Reprice (credits per size, per reference photo), switch on/off, or change the primary or fallback OpenRouter model and its cost per image. Audit-logged","description":"Requires admin permission models.write. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"X-CSRF-Token","in":"header","required":false,"description":"Required for cookie-authenticated mutations; returned by sign-in/sign-up.","schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"credits":{"description":"Credits per image at 1K","type":"integer","minimum":1,"maximum":1000000},"resolutionCredits":{"description":"Only sizes the tier offers (422 resolutionCredits.<size>/invalid_value)","type":"object","properties":{"2K":{"type":"integer","minimum":1,"maximum":1000000},"4K":{"type":"integer","minimum":1,"maximum":1000000}}},"referenceCredits":{"type":"integer","minimum":0,"maximum":100000},"enabled":{"type":"boolean"},"primaryModel":{"description":"Switch the primary OpenRouter model (checked against the catalog when it can be read: 422 primaryModel/not_found, invalid_quality, same_as_fallback); images use it from the next call","type":"string","pattern":"^[A-Za-z0-9._/-]{3,200}(:[A-Za-z0-9._-]{1,40})?$"},"primaryCostUsd":{"description":"USD per image of the primary (binding data.costPerUnitUsd)","type":"number","minimum":0,"maximum":100},"fallbackModel":{"description":"Set or switch the fallback model (the binding is created when missing); null removes it. Checked like the primary (same_as_primary)","anyOf":[{"type":"string","pattern":"^[A-Za-z0-9._/-]{3,200}(:[A-Za-z0-9._-]{1,40})?$"},{"type":"null"}]},"fallbackCostUsd":{"description":"USD per image of the fallback; required when a fallback is created","type":"number","minimum":0,"maximum":100}}},"example":{"credits":1,"resolutionCredits":{"2K":1,"4K":1},"referenceCredits":0,"enabled":true,"primaryModel":"example","primaryCostUsd":0,"fallbackModel":"example","fallbackCostUsd":0}}}},"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","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":"Product model id"},"slug":{"type":"string","description":"Tier slug plans list in entitlements.imageTiers"},"name":{"type":"object","properties":{"ar":{"type":"string","minLength":1},"en":{"type":"string","minLength":1}},"required":["ar","en"]},"description":{"anyOf":[{"type":"object","properties":{"ar":{"type":"string","minLength":1},"en":{"type":"string","minLength":1}},"required":["ar","en"]},{"type":"null"}]},"enabled":{"type":"boolean"},"order":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"credits":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Credits per image at 1K (credit_rate)"},"resolutions":{"type":"array","items":{"type":"string","enum":["1K","2K","4K"],"description":"Long side about 1,000, 2,000 or 4,000 pixels"}},"resolutionCredits":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"description":"Credits per image at the larger sizes the tier offers (2K, 4K)"},"referenceCredits":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Credits added per reference photo per image"},"maxReferences":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"transparent":{"type":"boolean"},"primary":{"anyOf":[{"type":"object","properties":{"model":{"type":"string","description":"providerModel of the OpenRouter image binding"},"bindingId":{"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)$"},"enabled":{"type":"boolean"},"weight":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"priority":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"status":{"type":"string","enum":["exists","missing","unknown"],"description":"unknown = the OpenRouter catalog could not be read"},"quality":{"description":"The quality after the colon, if any","type":["string","null"]},"capabilities":{"anyOf":[{"type":"object","properties":{"id":{"type":"string","description":"OpenRouter image model id (a binding may add the quality after a colon: openai/gpt-image-2.5-sunburst:high)"},"canonicalSlug":{"type":["string","null"]},"name":{"type":"string"},"resolutions":{"type":"array","items":{"type":"string"},"description":"Values of its resolution parameter (empty = not listed)"},"aspectRatios":{"type":"array","items":{"type":"string"}},"qualities":{"type":"array","items":{"type":"string"}},"transparent":{"type":"boolean","description":"Takes background: transparent"},"maxReferences":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}],"description":"input_references max, null when not listed"},"parameters":{"type":"array","items":{"type":"string"},"description":"Every parameter it lists"}},"required":["id","canonicalSlug","name","resolutions","aspectRatios","qualities","transparent","maxReferences","parameters"]},{"type":"null"}],"description":"Live from the catalog"},"unsupportedResolutions":{"type":"array","items":{"type":"string"},"description":"Sizes the tier sells that the model does not list (it is asked anyway; shown as a warning)"},"costPerImageUsd":{"description":"binding data.costPerUnitUsd: what one image costs (OpenRouter lists no image prices)","type":["number","null"]},"margins":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":["number","null"]},"description":"Per size the tier offers: its credits × dollarsPerCredit ÷ costPerImageUsd (null without a cost)"},"marginWarning":{"type":"boolean","description":"A margin below warningMargin"},"lastError":{"anyOf":[{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"status":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"at":{"type":"string"}},"required":["code","message","status","at"]},{"type":"null"}],"description":"The last error that said this model cannot be used (OpenRouter 404 \"no allowed providers\" from the account settings, model unavailable), recorded from a real submit; cleared by the next success or a model change"}},"required":["model","bindingId","enabled","weight","priority","status","quality","capabilities","unsupportedResolutions","costPerImageUsd","margins","marginWarning","lastError"]},{"type":"null"}]},"fallback":{"anyOf":[{"type":"object","properties":{"model":{"type":"string","description":"providerModel of the OpenRouter image binding"},"bindingId":{"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)$"},"enabled":{"type":"boolean"},"weight":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"priority":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"status":{"type":"string","enum":["exists","missing","unknown"],"description":"unknown = the OpenRouter catalog could not be read"},"quality":{"description":"The quality after the colon, if any","type":["string","null"]},"capabilities":{"anyOf":[{"type":"object","properties":{"id":{"type":"string","description":"OpenRouter image model id (a binding may add the quality after a colon: openai/gpt-image-2.5-sunburst:high)"},"canonicalSlug":{"type":["string","null"]},"name":{"type":"string"},"resolutions":{"type":"array","items":{"type":"string"},"description":"Values of its resolution parameter (empty = not listed)"},"aspectRatios":{"type":"array","items":{"type":"string"}},"qualities":{"type":"array","items":{"type":"string"}},"transparent":{"type":"boolean","description":"Takes background: transparent"},"maxReferences":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}],"description":"input_references max, null when not listed"},"parameters":{"type":"array","items":{"type":"string"},"description":"Every parameter it lists"}},"required":["id","canonicalSlug","name","resolutions","aspectRatios","qualities","transparent","maxReferences","parameters"]},{"type":"null"}],"description":"Live from the catalog"},"unsupportedResolutions":{"type":"array","items":{"type":"string"},"description":"Sizes the tier sells that the model does not list (it is asked anyway; shown as a warning)"},"costPerImageUsd":{"description":"binding data.costPerUnitUsd: what one image costs (OpenRouter lists no image prices)","type":["number","null"]},"margins":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":["number","null"]},"description":"Per size the tier offers: its credits × dollarsPerCredit ÷ costPerImageUsd (null without a cost)"},"marginWarning":{"type":"boolean","description":"A margin below warningMargin"},"lastError":{"anyOf":[{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"status":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"at":{"type":"string"}},"required":["code","message","status","at"]},{"type":"null"}],"description":"The last error that said this model cannot be used (OpenRouter 404 \"no allowed providers\" from the account settings, model unavailable), recorded from a real submit; cleared by the next success or a model change"}},"required":["model","bindingId","enabled","weight","priority","status","quality","capabilities","unsupportedResolutions","costPerImageUsd","margins","marginWarning","lastError"]},{"type":"null"}],"description":"The model an image is made by when the primary fails (data.role=fallback, priority 50)"},"plans":{"type":"array","items":{"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)$"},"slug":{"type":"string"},"name":{"type":"object","properties":{"ar":{"type":"string","minLength":1},"en":{"type":"string","minLength":1}},"required":["ar","en"]}},"required":["id","slug","name"]},"description":"Plans whose entitlements.imageTiers include this tier"}},"required":["id","slug","name","description","enabled","order","credits","resolutions","resolutionCredits","referenceCredits","maxReferences","transparent","primary","fallback","plans"]},"example":{"id":"01990000-0000-7000-8000-000000000001","slug":"example","name":{"ar":"مثال","en":"example"},"description":{"ar":"مثال","en":"example"},"enabled":true,"order":-9007199254740991,"credits":-9007199254740991,"resolutions":["1K"],"resolutionCredits":{},"referenceCredits":-9007199254740991,"maxReferences":-9007199254740991,"transparent":true,"primary":{"model":"example","bindingId":"01990000-0000-7000-8000-000000000001","enabled":true,"weight":-9007199254740991,"priority":-9007199254740991,"status":"exists","quality":"example","capabilities":{"id":"example","canonicalSlug":"example","name":"Noura","resolutions":["example"],"aspectRatios":["example"],"qualities":["example"],"transparent":true,"maxReferences":-9007199254740991,"parameters":["example"]},"unsupportedResolutions":["example"],"costPerImageUsd":"example","margins":{},"marginWarning":true,"lastError":{"code":"example","message":"example","status":-9007199254740991,"at":"example"}},"fallback":{"model":"example","bindingId":"01990000-0000-7000-8000-000000000001","enabled":true,"weight":-9007199254740991,"priority":-9007199254740991,"status":"exists","quality":"example","capabilities":{"id":"example","canonicalSlug":"example","name":"Noura","resolutions":["example"],"aspectRatios":["example"],"qualities":["example"],"transparent":true,"maxReferences":-9007199254740991,"parameters":["example"]},"unsupportedResolutions":["example"],"costPerImageUsd":"example","margins":{},"marginWarning":true,"lastError":{"code":"example","message":"example","status":-9007199254740991,"at":"example"}},"plans":[{"id":"01990000-0000-7000-8000-000000000001","slug":"example","name":{"ar":"مثال","en":"example"}}]}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/image/models/{id}","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/image/models/{id}","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/image/models/{id}","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/image/models/{id}","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/image/models/{id}","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/image/models/{id}","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/image/models/{id}","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/image/models/{id}","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/image/models/{id}","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/image/models/{id}","traceId":"request-id"}}}}}}},"/v1/admin/video/edit":{"get":{"operationId":"adminGetVideoEdit","tags":["Admin"],"summary":"Video edit studio: the switch and clip limits, each tier with its Higgsfield model, cost and margin, the plans that include it and the last 30 days of use","description":"Requires admin permission models.read. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false}],"security":[{"session":[]},{"apiKey":[]}],"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"settings":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Off = nobody can start an edit (the studio says it is paused); edits in progress finish"},"minSeconds":{"type":"number","minimum":1,"maximum":30,"description":"Shortest clip the studio takes"},"maxSeconds":{"type":"number","minimum":3,"maximum":120,"description":"Longest clip the studio takes on any plan (the model takes up to 15)"},"maxUploadMb":{"type":"integer","minimum":5,"maximum":500,"description":"Largest clip upload"},"translatePrompt":{"type":"boolean","description":"Rewrite the instruction in English for the model (recommended: the model is not tested on Arabic)"}},"required":["enabled","minSeconds","maxSeconds","maxUploadMb","translatePrompt"]},"defaults":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Off = nobody can start an edit (the studio says it is paused); edits in progress finish"},"minSeconds":{"type":"number","minimum":1,"maximum":30,"description":"Shortest clip the studio takes"},"maxSeconds":{"type":"number","minimum":3,"maximum":120,"description":"Longest clip the studio takes on any plan (the model takes up to 15)"},"maxUploadMb":{"type":"integer","minimum":5,"maximum":500,"description":"Largest clip upload"},"translatePrompt":{"type":"boolean","description":"Rewrite the instruction in English for the model (recommended: the model is not tested on Arabic)"}},"required":["enabled","minSeconds","maxSeconds","maxUploadMb","translatePrompt"]},"updatedAt":{"type":["string","null"]},"providerConfigured":{"type":"boolean","description":"HIGGSFIELD_API_KEY is set"},"tiers":{"type":"array","items":{"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":"Product model id"},"slug":{"type":"string","description":"Tier slug plans list in entitlements.videoEditTiers"},"name":{"type":"object","properties":{"ar":{"type":"string","minLength":1},"en":{"type":"string","minLength":1}},"required":["ar","en"]},"description":{"anyOf":[{"type":"object","properties":{"ar":{"type":"string","minLength":1},"en":{"type":"string","minLength":1}},"required":["ar","en"]},{"type":"null"}]},"creditsPerSecond":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"enabled":{"type":"boolean"},"order":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"bindingId":{"anyOf":[{"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)$"},{"type":"null"}]},"provider":{"type":["string","null"]},"model":{"description":"Provider endpoint, e.g. kling-video/o3/video-edit","type":["string","null"]},"mode":{"description":"std, pro or 4k","type":["string","null"]},"resolution":{"type":"string"},"costPerSecondUsd":{"description":"What the provider charges per second of clip (list price; a provider discount makes the real cost lower)","type":["number","null"]},"marginPct":{"description":"Margin at the cheapest credit a plan sells (the worst case)","type":["number","null"]},"plans":{"type":"array","items":{"type":"string"},"description":"Plan slugs whose videoEditTiers include this tier"},"last30d":{"type":"object","properties":{"edits":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"succeeded":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"failed":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"rejected":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Refused by the model moderation or our policy"},"seconds":{"type":"number"},"credits":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"costUsd":{"type":"number"}},"required":["edits","succeeded","failed","rejected","seconds","credits","costUsd"]},"lastError":{"anyOf":[{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"at":{"type":"string"}},"required":["code","message","at"]},{"type":"null"}]}},"required":["id","slug","name","description","creditsPerSecond","enabled","order","bindingId","provider","model","mode","resolution","costPerSecondUsd","marginPct","plans","last30d","lastError"]}},"creditValueUsd":{"type":"object","properties":{"min":{"type":"number"},"max":{"type":"number"}},"required":["min","max"],"description":"USD a credit is worth on the cheapest and dearest paid plan"},"last30d":{"type":"object","properties":{"edits":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"succeeded":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"failed":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"rejected":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Refused by the model moderation or our policy"},"seconds":{"type":"number"},"credits":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"costUsd":{"type":"number"}},"required":["edits","succeeded","failed","rejected","seconds","credits","costUsd"]},"plans":{"type":"array","items":{"type":"object","properties":{"slug":{"type":"string"},"name":{"type":"object","properties":{"ar":{"type":"string","minLength":1},"en":{"type":"string","minLength":1}},"required":["ar","en"]},"credits":{"type":"number","description":"Credits the plan gives each month"},"usdPerCredit":{"type":"number","description":"What one of its credits sells for (monthly price ÷ credits); 0 when free or by quote"},"videoEdit":{"type":"boolean"},"secondsPerMonth":{"type":"number","description":"Seconds its monthly credits buy on its cheapest tier"},"maxSeconds":{"type":"number"},"tiers":{"type":"array","items":{"type":"string"}},"rates":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"number"},"description":"Credits per second it pays on each of its tiers"},"ownRates":{"type":"array","items":{"type":"string"},"description":"Tiers it prices itself (the others follow the tier)"},"concurrent":{"type":"number"}},"required":["slug","name","credits","usdPerCredit","videoEdit","secondsPerMonth","maxSeconds","tiers","rates","ownRates","concurrent"]}}},"required":["settings","defaults","updatedAt","providerConfigured","tiers","creditValueUsd","last30d","plans"]},"example":{"settings":{"enabled":true,"minSeconds":1,"maxSeconds":3,"maxUploadMb":5,"translatePrompt":true},"defaults":{"enabled":true,"minSeconds":1,"maxSeconds":3,"maxUploadMb":5,"translatePrompt":true},"updatedAt":"2026-09-19T12:00:00.000Z","providerConfigured":true,"tiers":[{"id":"01990000-0000-7000-8000-000000000001","slug":"example","name":{"ar":"مثال","en":"example"},"description":{"ar":"مثال","en":"example"},"creditsPerSecond":-9007199254740991,"enabled":true,"order":-9007199254740991,"bindingId":"01990000-0000-7000-8000-000000000001","provider":"example","model":"example","mode":"example","resolution":"example","costPerSecondUsd":"example","marginPct":"example","plans":["example"],"last30d":{"edits":-9007199254740991,"succeeded":-9007199254740991,"failed":-9007199254740991,"rejected":-9007199254740991,"seconds":1,"credits":-9007199254740991,"costUsd":1},"lastError":{"code":"example","message":"example","at":"example"}}],"creditValueUsd":{"min":1,"max":1},"last30d":{"edits":-9007199254740991,"succeeded":-9007199254740991,"failed":-9007199254740991,"rejected":-9007199254740991,"seconds":1,"credits":-9007199254740991,"costUsd":1},"plans":[{"slug":"example","name":{"ar":"مثال","en":"example"},"credits":1,"usdPerCredit":1,"videoEdit":true,"secondsPerMonth":1,"maxSeconds":1,"tiers":["example"],"rates":{},"ownRates":["example"],"concurrent":1}]}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/video/edit","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/video/edit","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/video/edit","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/video/edit","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/video/edit","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/video/edit","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/video/edit","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/video/edit","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/video/edit","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/video/edit","traceId":"request-id"}}}}}}},"/v1/admin/video/edit/settings":{"put":{"operationId":"adminUpdateVideoEditSettings","tags":["Admin"],"summary":"Switch the studio on or off and set the clip limits. Audit-logged","description":"Requires admin permission models.write. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"X-CSRF-Token","in":"header","required":false,"description":"Required for cookie-authenticated mutations; returned by sign-in/sign-up.","schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"enabled":{"type":"boolean","description":"Off = nobody can start an edit (the studio says it is paused); edits in progress finish"},"minSeconds":{"type":"number","minimum":1,"maximum":30,"description":"Shortest clip the studio takes"},"maxSeconds":{"type":"number","minimum":3,"maximum":120,"description":"Longest clip the studio takes on any plan (the model takes up to 15)"},"maxUploadMb":{"type":"integer","minimum":5,"maximum":500,"description":"Largest clip upload"},"translatePrompt":{"type":"boolean","description":"Rewrite the instruction in English for the model (recommended: the model is not tested on Arabic)"}},"required":["enabled","minSeconds","maxSeconds","maxUploadMb","translatePrompt"]},"example":{"enabled":true,"minSeconds":1,"maxSeconds":3,"maxUploadMb":5,"translatePrompt":true}}}},"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"settings":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Off = nobody can start an edit (the studio says it is paused); edits in progress finish"},"minSeconds":{"type":"number","minimum":1,"maximum":30,"description":"Shortest clip the studio takes"},"maxSeconds":{"type":"number","minimum":3,"maximum":120,"description":"Longest clip the studio takes on any plan (the model takes up to 15)"},"maxUploadMb":{"type":"integer","minimum":5,"maximum":500,"description":"Largest clip upload"},"translatePrompt":{"type":"boolean","description":"Rewrite the instruction in English for the model (recommended: the model is not tested on Arabic)"}},"required":["enabled","minSeconds","maxSeconds","maxUploadMb","translatePrompt"]},"defaults":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Off = nobody can start an edit (the studio says it is paused); edits in progress finish"},"minSeconds":{"type":"number","minimum":1,"maximum":30,"description":"Shortest clip the studio takes"},"maxSeconds":{"type":"number","minimum":3,"maximum":120,"description":"Longest clip the studio takes on any plan (the model takes up to 15)"},"maxUploadMb":{"type":"integer","minimum":5,"maximum":500,"description":"Largest clip upload"},"translatePrompt":{"type":"boolean","description":"Rewrite the instruction in English for the model (recommended: the model is not tested on Arabic)"}},"required":["enabled","minSeconds","maxSeconds","maxUploadMb","translatePrompt"]},"updatedAt":{"type":["string","null"]},"providerConfigured":{"type":"boolean","description":"HIGGSFIELD_API_KEY is set"},"tiers":{"type":"array","items":{"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":"Product model id"},"slug":{"type":"string","description":"Tier slug plans list in entitlements.videoEditTiers"},"name":{"type":"object","properties":{"ar":{"type":"string","minLength":1},"en":{"type":"string","minLength":1}},"required":["ar","en"]},"description":{"anyOf":[{"type":"object","properties":{"ar":{"type":"string","minLength":1},"en":{"type":"string","minLength":1}},"required":["ar","en"]},{"type":"null"}]},"creditsPerSecond":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"enabled":{"type":"boolean"},"order":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"bindingId":{"anyOf":[{"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)$"},{"type":"null"}]},"provider":{"type":["string","null"]},"model":{"description":"Provider endpoint, e.g. kling-video/o3/video-edit","type":["string","null"]},"mode":{"description":"std, pro or 4k","type":["string","null"]},"resolution":{"type":"string"},"costPerSecondUsd":{"description":"What the provider charges per second of clip (list price; a provider discount makes the real cost lower)","type":["number","null"]},"marginPct":{"description":"Margin at the cheapest credit a plan sells (the worst case)","type":["number","null"]},"plans":{"type":"array","items":{"type":"string"},"description":"Plan slugs whose videoEditTiers include this tier"},"last30d":{"type":"object","properties":{"edits":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"succeeded":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"failed":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"rejected":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Refused by the model moderation or our policy"},"seconds":{"type":"number"},"credits":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"costUsd":{"type":"number"}},"required":["edits","succeeded","failed","rejected","seconds","credits","costUsd"]},"lastError":{"anyOf":[{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"at":{"type":"string"}},"required":["code","message","at"]},{"type":"null"}]}},"required":["id","slug","name","description","creditsPerSecond","enabled","order","bindingId","provider","model","mode","resolution","costPerSecondUsd","marginPct","plans","last30d","lastError"]}},"creditValueUsd":{"type":"object","properties":{"min":{"type":"number"},"max":{"type":"number"}},"required":["min","max"],"description":"USD a credit is worth on the cheapest and dearest paid plan"},"last30d":{"type":"object","properties":{"edits":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"succeeded":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"failed":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"rejected":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Refused by the model moderation or our policy"},"seconds":{"type":"number"},"credits":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"costUsd":{"type":"number"}},"required":["edits","succeeded","failed","rejected","seconds","credits","costUsd"]},"plans":{"type":"array","items":{"type":"object","properties":{"slug":{"type":"string"},"name":{"type":"object","properties":{"ar":{"type":"string","minLength":1},"en":{"type":"string","minLength":1}},"required":["ar","en"]},"credits":{"type":"number","description":"Credits the plan gives each month"},"usdPerCredit":{"type":"number","description":"What one of its credits sells for (monthly price ÷ credits); 0 when free or by quote"},"videoEdit":{"type":"boolean"},"secondsPerMonth":{"type":"number","description":"Seconds its monthly credits buy on its cheapest tier"},"maxSeconds":{"type":"number"},"tiers":{"type":"array","items":{"type":"string"}},"rates":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"number"},"description":"Credits per second it pays on each of its tiers"},"ownRates":{"type":"array","items":{"type":"string"},"description":"Tiers it prices itself (the others follow the tier)"},"concurrent":{"type":"number"}},"required":["slug","name","credits","usdPerCredit","videoEdit","secondsPerMonth","maxSeconds","tiers","rates","ownRates","concurrent"]}}},"required":["settings","defaults","updatedAt","providerConfigured","tiers","creditValueUsd","last30d","plans"]},"example":{"settings":{"enabled":true,"minSeconds":1,"maxSeconds":3,"maxUploadMb":5,"translatePrompt":true},"defaults":{"enabled":true,"minSeconds":1,"maxSeconds":3,"maxUploadMb":5,"translatePrompt":true},"updatedAt":"2026-09-19T12:00:00.000Z","providerConfigured":true,"tiers":[{"id":"01990000-0000-7000-8000-000000000001","slug":"example","name":{"ar":"مثال","en":"example"},"description":{"ar":"مثال","en":"example"},"creditsPerSecond":-9007199254740991,"enabled":true,"order":-9007199254740991,"bindingId":"01990000-0000-7000-8000-000000000001","provider":"example","model":"example","mode":"example","resolution":"example","costPerSecondUsd":"example","marginPct":"example","plans":["example"],"last30d":{"edits":-9007199254740991,"succeeded":-9007199254740991,"failed":-9007199254740991,"rejected":-9007199254740991,"seconds":1,"credits":-9007199254740991,"costUsd":1},"lastError":{"code":"example","message":"example","at":"example"}}],"creditValueUsd":{"min":1,"max":1},"last30d":{"edits":-9007199254740991,"succeeded":-9007199254740991,"failed":-9007199254740991,"rejected":-9007199254740991,"seconds":1,"credits":-9007199254740991,"costUsd":1},"plans":[{"slug":"example","name":{"ar":"مثال","en":"example"},"credits":1,"usdPerCredit":1,"videoEdit":true,"secondsPerMonth":1,"maxSeconds":1,"tiers":["example"],"rates":{},"ownRates":["example"],"concurrent":1}]}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/video/edit/settings","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/video/edit/settings","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/video/edit/settings","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/video/edit/settings","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/video/edit/settings","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/video/edit/settings","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/video/edit/settings","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/video/edit/settings","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/video/edit/settings","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/video/edit/settings","traceId":"request-id"}}}}}}},"/v1/admin/video/edit/tiers/{id}":{"patch":{"operationId":"adminUpdateVideoEditTier","tags":["Admin"],"summary":"Rename, reprice, switch on or off, change the provider model, mode or cost, or choose the plans of an edit tier. Audit-logged","description":"Requires admin permission models.write. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"X-CSRF-Token","in":"header","required":false,"description":"Required for cookie-authenticated mutations; returned by sign-in/sign-up.","schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"name":{"type":"object","properties":{"ar":{"type":"string","minLength":1},"en":{"type":"string","minLength":1}},"required":["ar","en"]},"description":{"type":"object","properties":{"ar":{"type":"string","minLength":1},"en":{"type":"string","minLength":1}},"required":["ar","en"]},"creditsPerSecond":{"type":"integer","minimum":1,"maximum":1000000},"enabled":{"type":"boolean"},"model":{"description":"Provider endpoint","type":"string","pattern":"^[A-Za-z0-9._/-]{3,200}$"},"mode":{"type":"string","enum":["std","pro","4k"]},"costPerSecondUsd":{"type":"number","minimum":0,"maximum":100},"plans":{"description":"Plans that may use this tier (sets entitlements.videoEditTiers on each plan)","maxItems":50,"type":"array","items":{"type":"string","minLength":1,"maxLength":100}}}},"example":{"name":{"ar":"مثال","en":"example"},"description":{"ar":"مثال","en":"example"},"creditsPerSecond":1,"enabled":true,"model":"example","mode":"std","costPerSecondUsd":0,"plans":["example"]}}}},"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"settings":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Off = nobody can start an edit (the studio says it is paused); edits in progress finish"},"minSeconds":{"type":"number","minimum":1,"maximum":30,"description":"Shortest clip the studio takes"},"maxSeconds":{"type":"number","minimum":3,"maximum":120,"description":"Longest clip the studio takes on any plan (the model takes up to 15)"},"maxUploadMb":{"type":"integer","minimum":5,"maximum":500,"description":"Largest clip upload"},"translatePrompt":{"type":"boolean","description":"Rewrite the instruction in English for the model (recommended: the model is not tested on Arabic)"}},"required":["enabled","minSeconds","maxSeconds","maxUploadMb","translatePrompt"]},"defaults":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Off = nobody can start an edit (the studio says it is paused); edits in progress finish"},"minSeconds":{"type":"number","minimum":1,"maximum":30,"description":"Shortest clip the studio takes"},"maxSeconds":{"type":"number","minimum":3,"maximum":120,"description":"Longest clip the studio takes on any plan (the model takes up to 15)"},"maxUploadMb":{"type":"integer","minimum":5,"maximum":500,"description":"Largest clip upload"},"translatePrompt":{"type":"boolean","description":"Rewrite the instruction in English for the model (recommended: the model is not tested on Arabic)"}},"required":["enabled","minSeconds","maxSeconds","maxUploadMb","translatePrompt"]},"updatedAt":{"type":["string","null"]},"providerConfigured":{"type":"boolean","description":"HIGGSFIELD_API_KEY is set"},"tiers":{"type":"array","items":{"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":"Product model id"},"slug":{"type":"string","description":"Tier slug plans list in entitlements.videoEditTiers"},"name":{"type":"object","properties":{"ar":{"type":"string","minLength":1},"en":{"type":"string","minLength":1}},"required":["ar","en"]},"description":{"anyOf":[{"type":"object","properties":{"ar":{"type":"string","minLength":1},"en":{"type":"string","minLength":1}},"required":["ar","en"]},{"type":"null"}]},"creditsPerSecond":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"enabled":{"type":"boolean"},"order":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"bindingId":{"anyOf":[{"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)$"},{"type":"null"}]},"provider":{"type":["string","null"]},"model":{"description":"Provider endpoint, e.g. kling-video/o3/video-edit","type":["string","null"]},"mode":{"description":"std, pro or 4k","type":["string","null"]},"resolution":{"type":"string"},"costPerSecondUsd":{"description":"What the provider charges per second of clip (list price; a provider discount makes the real cost lower)","type":["number","null"]},"marginPct":{"description":"Margin at the cheapest credit a plan sells (the worst case)","type":["number","null"]},"plans":{"type":"array","items":{"type":"string"},"description":"Plan slugs whose videoEditTiers include this tier"},"last30d":{"type":"object","properties":{"edits":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"succeeded":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"failed":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"rejected":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Refused by the model moderation or our policy"},"seconds":{"type":"number"},"credits":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"costUsd":{"type":"number"}},"required":["edits","succeeded","failed","rejected","seconds","credits","costUsd"]},"lastError":{"anyOf":[{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"at":{"type":"string"}},"required":["code","message","at"]},{"type":"null"}]}},"required":["id","slug","name","description","creditsPerSecond","enabled","order","bindingId","provider","model","mode","resolution","costPerSecondUsd","marginPct","plans","last30d","lastError"]}},"creditValueUsd":{"type":"object","properties":{"min":{"type":"number"},"max":{"type":"number"}},"required":["min","max"],"description":"USD a credit is worth on the cheapest and dearest paid plan"},"last30d":{"type":"object","properties":{"edits":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"succeeded":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"failed":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"rejected":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Refused by the model moderation or our policy"},"seconds":{"type":"number"},"credits":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"costUsd":{"type":"number"}},"required":["edits","succeeded","failed","rejected","seconds","credits","costUsd"]},"plans":{"type":"array","items":{"type":"object","properties":{"slug":{"type":"string"},"name":{"type":"object","properties":{"ar":{"type":"string","minLength":1},"en":{"type":"string","minLength":1}},"required":["ar","en"]},"credits":{"type":"number","description":"Credits the plan gives each month"},"usdPerCredit":{"type":"number","description":"What one of its credits sells for (monthly price ÷ credits); 0 when free or by quote"},"videoEdit":{"type":"boolean"},"secondsPerMonth":{"type":"number","description":"Seconds its monthly credits buy on its cheapest tier"},"maxSeconds":{"type":"number"},"tiers":{"type":"array","items":{"type":"string"}},"rates":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"number"},"description":"Credits per second it pays on each of its tiers"},"ownRates":{"type":"array","items":{"type":"string"},"description":"Tiers it prices itself (the others follow the tier)"},"concurrent":{"type":"number"}},"required":["slug","name","credits","usdPerCredit","videoEdit","secondsPerMonth","maxSeconds","tiers","rates","ownRates","concurrent"]}}},"required":["settings","defaults","updatedAt","providerConfigured","tiers","creditValueUsd","last30d","plans"]},"example":{"settings":{"enabled":true,"minSeconds":1,"maxSeconds":3,"maxUploadMb":5,"translatePrompt":true},"defaults":{"enabled":true,"minSeconds":1,"maxSeconds":3,"maxUploadMb":5,"translatePrompt":true},"updatedAt":"2026-09-19T12:00:00.000Z","providerConfigured":true,"tiers":[{"id":"01990000-0000-7000-8000-000000000001","slug":"example","name":{"ar":"مثال","en":"example"},"description":{"ar":"مثال","en":"example"},"creditsPerSecond":-9007199254740991,"enabled":true,"order":-9007199254740991,"bindingId":"01990000-0000-7000-8000-000000000001","provider":"example","model":"example","mode":"example","resolution":"example","costPerSecondUsd":"example","marginPct":"example","plans":["example"],"last30d":{"edits":-9007199254740991,"succeeded":-9007199254740991,"failed":-9007199254740991,"rejected":-9007199254740991,"seconds":1,"credits":-9007199254740991,"costUsd":1},"lastError":{"code":"example","message":"example","at":"example"}}],"creditValueUsd":{"min":1,"max":1},"last30d":{"edits":-9007199254740991,"succeeded":-9007199254740991,"failed":-9007199254740991,"rejected":-9007199254740991,"seconds":1,"credits":-9007199254740991,"costUsd":1},"plans":[{"slug":"example","name":{"ar":"مثال","en":"example"},"credits":1,"usdPerCredit":1,"videoEdit":true,"secondsPerMonth":1,"maxSeconds":1,"tiers":["example"],"rates":{},"ownRates":["example"],"concurrent":1}]}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/video/edit/tiers/{id}","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/video/edit/tiers/{id}","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/video/edit/tiers/{id}","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/video/edit/tiers/{id}","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/video/edit/tiers/{id}","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/video/edit/tiers/{id}","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/video/edit/tiers/{id}","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/video/edit/tiers/{id}","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/video/edit/tiers/{id}","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/video/edit/tiers/{id}","traceId":"request-id"}}}}}}},"/v1/admin/video/edits":{"get":{"operationId":"adminListVideoEdits","tags":["Admin"],"summary":"Every video edit, newest first, with the instruction sent to the model, cost, credits and signed links to the original and the result","description":"Requires admin permission models.read. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"cursor","in":"query","required":false,"schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"schema":{"default":25,"type":"integer","minimum":1,"maximum":100}},{"name":"q","in":"query","required":false,"schema":{"type":"string","maxLength":200}},{"name":"status","in":"query","required":false,"schema":{"type":"string","enum":["preparing","rendering","finishing","ready","failed"],"description":"preparing = checking and conforming the clip; rendering = the model is editing; finishing = original sound laid back"}},{"name":"operation","in":"query","required":false,"schema":{"type":"string","enum":["remove","add","replace","restyle"],"description":"remove = take something out; add = put in what the reference photo shows; replace = swap people or objects for the ones in the reference photos; restyle = change the look of the whole clip (style, colour grade, lighting, mood) and keep everything in it; reference photos optional (a style to follow)"}},{"name":"id","in":"query","required":false,"schema":{"description":"One edit by 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)$"}}],"security":[{"session":[]},{"apiKey":[]}],"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"items":{"type":"array","items":{"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)$"},"createdAt":{"type":"string"},"workspaceId":{"anyOf":[{"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)$"},{"type":"null"}]},"workspaceName":{"type":["string","null"]},"userId":{"anyOf":[{"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)$"},{"type":"null"}]},"userEmail":{"type":["string","null"]},"plan":{"type":["string","null"]},"title":{"type":"string"},"operation":{"type":"string","enum":["remove","add","replace","restyle"],"description":"remove = take something out; add = put in what the reference photo shows; replace = swap people or objects for the ones in the reference photos; restyle = change the look of the whole clip (style, colour grade, lighting, mood) and keep everything in it; reference photos optional (a style to follow)"},"status":{"type":"string","enum":["preparing","rendering","finishing","ready","failed"],"description":"preparing = checking and conforming the clip; rendering = the model is editing; finishing = original sound laid back"},"error":{"type":["string","null"]},"errorDetail":{"type":["string","null"]},"tier":{"type":"string"},"seconds":{"type":"number"},"credits":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Charged (reserved while in progress)"},"costUsd":{"type":["number","null"]},"prompt":{"type":"string"},"providerPrompt":{"description":"The English instruction sent to the model","type":["string","null"]},"model":{"type":["string","null"]},"references":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"sourceUrl":{"type":["string","null"]},"outputUrl":{"type":["string","null"]},"thumbnailUrl":{"type":["string","null"]},"generationId":{"anyOf":[{"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)$"},{"type":"null"}]},"finishedAt":{"type":["string","null"]},"timing":{"description":"Where the time went (seconds; null = unknown)","type":"object","properties":{"prepareSeconds":{"type":["number","null"]},"queueSeconds":{"description":"Waiting in the provider queue","type":["number","null"]},"renderSeconds":{"type":["number","null"]},"providerSeconds":{"description":"From submission to the result (queue and render)","type":["number","null"]},"finishSeconds":{"type":["number","null"]}},"required":["prepareSeconds","queueSeconds","renderSeconds","providerSeconds","finishSeconds"]},"templateSlug":{"description":"The template the edit started from","type":["string","null"]},"templateId":{"anyOf":[{"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)$"},{"type":"null"}]}},"required":["id","createdAt","workspaceId","workspaceName","userId","userEmail","plan","title","operation","status","error","errorDetail","tier","seconds","credits","costUsd","prompt","providerPrompt","model","references","sourceUrl","outputUrl","thumbnailUrl","generationId","finishedAt"]}},"nextCursor":{"type":["string","null"]}},"required":["items","nextCursor"]},"example":{"items":[{"id":"01990000-0000-7000-8000-000000000001","createdAt":"2026-09-19T12:00:00.000Z","workspaceId":"01990000-0000-7000-8000-000000000001","workspaceName":"example","userId":"01990000-0000-7000-8000-000000000001","userEmail":"example","plan":"example","title":"example","operation":"remove","status":"preparing","error":"example","errorDetail":"example","tier":"example","seconds":1,"credits":-9007199254740991,"costUsd":"example","prompt":"مرحباً بك في فوكلا.","providerPrompt":"example","model":"example","references":-9007199254740991,"sourceUrl":"http://localhost:4000/example","outputUrl":"http://localhost:4000/example","thumbnailUrl":"http://localhost:4000/example","generationId":"01990000-0000-7000-8000-000000000001","finishedAt":"2026-09-19T12:00:00.000Z","timing":{"prepareSeconds":"example","queueSeconds":"example","renderSeconds":"example","providerSeconds":"example","finishSeconds":"example"},"templateSlug":"example","templateId":"01990000-0000-7000-8000-000000000001"}],"nextCursor":"example"}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/video/edits","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/video/edits","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/video/edits","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/video/edits","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/video/edits","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/video/edits","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/video/edits","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/video/edits","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/video/edits","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/video/edits","traceId":"request-id"}}}}}}},"/v1/admin/video/templates":{"get":{"operationId":"adminListVideoTemplates","tags":["Admin"],"summary":"Every video template (drafts included) in display order, with its media, usage and what still blocks publishing, plus the categories","description":"Requires admin permission content.read. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"status","in":"query","required":false,"schema":{"type":"string","enum":["draft","published","archived"],"description":"Only published templates with a ready clip are public"}},{"name":"category","in":"query","required":false,"schema":{"type":"string","maxLength":80}},{"name":"q","in":"query","required":false,"schema":{"type":"string","maxLength":200}}],"security":[{"session":[]},{"apiKey":[]}],"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"items":{"type":"array","items":{"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)$"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"},"slug":{"type":"string"},"slugAr":{"type":["string","null"]},"status":{"type":"string","enum":["draft","published","archived"],"description":"Only published templates with a ready clip are public"},"title":{"type":"object","properties":{"ar":{"type":"string"},"en":{"type":"string"}},"required":["ar","en"]},"description":{"type":"object","properties":{"ar":{"type":"string"},"en":{"type":"string"}},"required":["ar","en"]},"category":{"type":"string"},"keywords":{"type":"object","properties":{"ar":{"type":"array","items":{"type":"string"}},"en":{"type":"array","items":{"type":"string"}}},"required":["ar","en"]},"seo":{"type":"object","properties":{"title":{"type":"object","properties":{"ar":{"type":"string"},"en":{"type":"string"}}},"description":{"type":"object","properties":{"ar":{"type":"string"},"en":{"type":"string"}}}},"required":["title","description"]},"operation":{"type":"string","enum":["add","replace"],"description":"replace = swap the people or objects of the clip for the ones in the photos; add = put what the photos show into the clip"},"prompt":{"type":"string"},"suggestedPrompt":{"type":"string","description":"What is sent when prompt is empty"},"slots":{"type":"array","items":{"type":"object","properties":{"label":{"type":"object","properties":{"ar":{"type":"string","maxLength":60},"en":{"type":"string","maxLength":60}},"required":["ar","en"]},"hint":{"type":"object","properties":{"ar":{"type":"string","maxLength":160},"en":{"type":"string","maxLength":160}}}},"required":["label"]}},"badge":{"anyOf":[{"type":"string","enum":["new","trending","hot","viral"]},{"type":"null"}]},"featured":{"type":"boolean"},"order":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"defaultTier":{"type":["string","null"]},"clip":{"anyOf":[{"type":"object","properties":{"url":{"type":"string"},"poster":{"type":["string","null"]},"durationSeconds":{"type":"number"},"width":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"height":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"fps":{"type":"number"},"hasAudio":{"type":"boolean"},"bytes":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}},"required":["url","poster","durationSeconds","width","height","fps","hasAudio","bytes"]},{"type":"null"}]},"preview":{"anyOf":[{"type":"object","properties":{"url":{"type":"string"},"poster":{"type":["string","null"]},"durationSeconds":{"type":"number"},"width":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"height":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"fps":{"type":"number"},"hasAudio":{"type":"boolean"},"bytes":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}},"required":["url","poster","durationSeconds","width","height","fps","hasAudio","bytes"]},{"type":"null"}]},"picture":{"type":["string","null"]},"poster":{"description":"Uploaded cover (else the clip's own frame)","type":["string","null"]},"pending":{"type":"object","properties":{"clip":{"anyOf":[{"type":"object","properties":{"version":{"type":"string"},"startedAt":{"type":"string"},"error":{"type":["string","null"]}},"required":["version","startedAt","error"]},{"type":"null"}]},"preview":{"anyOf":[{"type":"object","properties":{"version":{"type":"string"},"startedAt":{"type":"string"},"error":{"type":["string","null"]}},"required":["version","startedAt","error"]},{"type":"null"}]}},"required":["clip","preview"],"description":"Uploads the media worker is still preparing (or the error of the last one)"},"usage":{"type":"object","properties":{"total":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"last30d":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"succeeded":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"failed":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"credits":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}},"required":["total","last30d","succeeded","failed","credits"]},"issues":{"type":"array","items":{"type":"string"},"description":"What still blocks publishing: clip, title.ar, title.en, description.ar, description.en, category, prompt"},"publishedAt":{"type":["string","null"]}},"required":["id","createdAt","updatedAt","slug","slugAr","status","title","description","category","keywords","seo","operation","prompt","suggestedPrompt","slots","badge","featured","order","defaultTier","clip","preview","picture","poster","pending","usage","issues","publishedAt"]}},"categories":{"type":"array","items":{"type":"object","properties":{"slug":{"type":"string","minLength":2,"maxLength":80,"pattern":"^[a-z0-9]+(?:-[a-z0-9]+)*$"},"name":{"type":"object","properties":{"ar":{"type":"string","minLength":1},"en":{"type":"string","minLength":1}},"required":["ar","en"]},"description":{"type":"object","properties":{"ar":{"type":"string","maxLength":300},"en":{"type":"string","maxLength":300}}},"count":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Templates of any status"}},"required":["slug","name","count"]}},"maxUploadBytes":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"clip":{"type":"object","properties":{"minSeconds":{"type":"number"},"maxSeconds":{"type":"number"}},"required":["minSeconds","maxSeconds"],"description":"How long a template clip may be (what the model takes)"}},"required":["items","categories","maxUploadBytes","clip"]},"example":{"items":[{"id":"01990000-0000-7000-8000-000000000001","createdAt":"2026-09-19T12:00:00.000Z","updatedAt":"2026-09-19T12:00:00.000Z","slug":"example","slugAr":"example","status":"draft","title":{"ar":"مثال","en":"example"},"description":{"ar":"مثال","en":"example"},"category":"example","keywords":{"ar":["example"],"en":["example"]},"seo":{"title":{"ar":"مثال","en":"example"},"description":{"ar":"مثال","en":"example"}},"operation":"add","prompt":"مرحباً بك في فوكلا.","suggestedPrompt":"example","slots":[{"label":{"ar":"مثال","en":"example"},"hint":{"ar":"مثال","en":"example"}}],"badge":"new","featured":true,"order":-9007199254740991,"defaultTier":"example","clip":{"url":"example","poster":"example","durationSeconds":1,"width":-9007199254740991,"height":-9007199254740991,"fps":1,"hasAudio":true,"bytes":-9007199254740991},"preview":{"url":"example","poster":"example","durationSeconds":1,"width":-9007199254740991,"height":-9007199254740991,"fps":1,"hasAudio":true,"bytes":-9007199254740991},"picture":"example","poster":"example","pending":{"clip":{"version":"example","startedAt":"2026-09-19T12:00:00.000Z","error":"example"},"preview":{"version":"example","startedAt":"2026-09-19T12:00:00.000Z","error":"example"}},"usage":{"total":-9007199254740991,"last30d":-9007199254740991,"succeeded":-9007199254740991,"failed":-9007199254740991,"credits":-9007199254740991},"issues":["example"],"publishedAt":"2026-09-19T12:00:00.000Z"}],"categories":[{"slug":"example","name":{"ar":"مثال","en":"example"},"description":{"ar":"مثال","en":"example"},"count":-9007199254740991}],"maxUploadBytes":-9007199254740991,"clip":{"minSeconds":1,"maxSeconds":1}}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/video/templates","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/video/templates","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/video/templates","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/video/templates","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/video/templates","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/video/templates","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/video/templates","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/video/templates","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/video/templates","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/video/templates","traceId":"request-id"}}}}}},"post":{"operationId":"adminCreateVideoTemplate","tags":["Admin"],"summary":"Create a draft template; upload its clip next. 409 when the slug is taken. Audit-logged","description":"Requires admin permission content.write. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"X-CSRF-Token","in":"header","required":false,"description":"Required for cookie-authenticated mutations; returned by sign-in/sign-up.","schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"slug":{"type":"string","minLength":2,"maxLength":80,"pattern":"^[a-z0-9]+(?:-[a-z0-9]+)*$"},"slugAr":{"anyOf":[{"type":"string","minLength":2,"maxLength":120,"pattern":"^[ء-ي0-9]+(?:-[ء-ي0-9]+)*$"},{"type":"null"}]},"title":{"type":"object","properties":{"ar":{"type":"string","maxLength":120},"en":{"type":"string","maxLength":120}},"required":["ar","en"]},"description":{"type":"object","properties":{"ar":{"type":"string","maxLength":800},"en":{"type":"string","maxLength":800}},"required":["ar","en"]},"category":{"type":"string","minLength":2,"maxLength":80,"pattern":"^[a-z0-9]+(?:-[a-z0-9]+)*$"},"keywords":{"type":"object","properties":{"ar":{"maxItems":30,"type":"array","items":{"type":"string","minLength":1,"maxLength":80}},"en":{"maxItems":30,"type":"array","items":{"type":"string","minLength":1,"maxLength":80}}},"required":["ar","en"]},"seo":{"type":"object","properties":{"title":{"type":"object","properties":{"ar":{"type":"string","maxLength":120},"en":{"type":"string","maxLength":120}}},"description":{"type":"object","properties":{"ar":{"type":"string","maxLength":320},"en":{"type":"string","maxLength":320}}}},"required":["title","description"]},"operation":{"type":"string","enum":["add","replace"],"description":"replace = swap the people or objects of the clip for the ones in the photos; add = put what the photos show into the clip"},"prompt":{"type":"string","maxLength":2400,"description":"The English instruction sent to the model: @Video1 is the clip, @Image1..@Image4 the photos in slot order. Empty = the suggested instruction for the action and number of slots"},"slots":{"minItems":1,"maxItems":4,"type":"array","items":{"type":"object","properties":{"label":{"type":"object","properties":{"ar":{"type":"string","maxLength":60},"en":{"type":"string","maxLength":60}},"required":["ar","en"]},"hint":{"type":"object","properties":{"ar":{"type":"string","maxLength":160},"en":{"type":"string","maxLength":160}}}},"required":["label"]}},"badge":{"anyOf":[{"type":"string","enum":["new","trending","hot","viral"]},{"type":"null"}]},"featured":{"type":"boolean"},"order":{"type":"integer","minimum":0,"maximum":100000,"description":"Lower shows first"},"defaultTier":{"anyOf":[{"type":"string","minLength":1,"maxLength":100},{"type":"null"}],"description":"Edit tier preselected in the studio"}},"required":["slug","title"]},"example":{"slug":"example","slugAr":"example","title":{"ar":"مثال","en":"example"},"description":{"ar":"مثال","en":"example"},"category":"example","keywords":{"ar":["example"],"en":["example"]},"seo":{"title":{"ar":"مثال","en":"example"},"description":{"ar":"مثال","en":"example"}},"operation":"add","prompt":"مرحباً بك في فوكلا.","slots":[{"label":{"ar":"مثال","en":"example"},"hint":{"ar":"مثال","en":"example"}}],"badge":"new","featured":true,"order":0,"defaultTier":"example"}}}},"responses":{"201":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","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)$"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"},"slug":{"type":"string"},"slugAr":{"type":["string","null"]},"status":{"type":"string","enum":["draft","published","archived"],"description":"Only published templates with a ready clip are public"},"title":{"type":"object","properties":{"ar":{"type":"string"},"en":{"type":"string"}},"required":["ar","en"]},"description":{"type":"object","properties":{"ar":{"type":"string"},"en":{"type":"string"}},"required":["ar","en"]},"category":{"type":"string"},"keywords":{"type":"object","properties":{"ar":{"type":"array","items":{"type":"string"}},"en":{"type":"array","items":{"type":"string"}}},"required":["ar","en"]},"seo":{"type":"object","properties":{"title":{"type":"object","properties":{"ar":{"type":"string"},"en":{"type":"string"}}},"description":{"type":"object","properties":{"ar":{"type":"string"},"en":{"type":"string"}}}},"required":["title","description"]},"operation":{"type":"string","enum":["add","replace"],"description":"replace = swap the people or objects of the clip for the ones in the photos; add = put what the photos show into the clip"},"prompt":{"type":"string"},"suggestedPrompt":{"type":"string","description":"What is sent when prompt is empty"},"slots":{"type":"array","items":{"type":"object","properties":{"label":{"type":"object","properties":{"ar":{"type":"string","maxLength":60},"en":{"type":"string","maxLength":60}},"required":["ar","en"]},"hint":{"type":"object","properties":{"ar":{"type":"string","maxLength":160},"en":{"type":"string","maxLength":160}}}},"required":["label"]}},"badge":{"anyOf":[{"type":"string","enum":["new","trending","hot","viral"]},{"type":"null"}]},"featured":{"type":"boolean"},"order":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"defaultTier":{"type":["string","null"]},"clip":{"anyOf":[{"type":"object","properties":{"url":{"type":"string"},"poster":{"type":["string","null"]},"durationSeconds":{"type":"number"},"width":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"height":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"fps":{"type":"number"},"hasAudio":{"type":"boolean"},"bytes":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}},"required":["url","poster","durationSeconds","width","height","fps","hasAudio","bytes"]},{"type":"null"}]},"preview":{"anyOf":[{"type":"object","properties":{"url":{"type":"string"},"poster":{"type":["string","null"]},"durationSeconds":{"type":"number"},"width":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"height":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"fps":{"type":"number"},"hasAudio":{"type":"boolean"},"bytes":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}},"required":["url","poster","durationSeconds","width","height","fps","hasAudio","bytes"]},{"type":"null"}]},"picture":{"type":["string","null"]},"poster":{"description":"Uploaded cover (else the clip's own frame)","type":["string","null"]},"pending":{"type":"object","properties":{"clip":{"anyOf":[{"type":"object","properties":{"version":{"type":"string"},"startedAt":{"type":"string"},"error":{"type":["string","null"]}},"required":["version","startedAt","error"]},{"type":"null"}]},"preview":{"anyOf":[{"type":"object","properties":{"version":{"type":"string"},"startedAt":{"type":"string"},"error":{"type":["string","null"]}},"required":["version","startedAt","error"]},{"type":"null"}]}},"required":["clip","preview"],"description":"Uploads the media worker is still preparing (or the error of the last one)"},"usage":{"type":"object","properties":{"total":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"last30d":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"succeeded":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"failed":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"credits":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}},"required":["total","last30d","succeeded","failed","credits"]},"issues":{"type":"array","items":{"type":"string"},"description":"What still blocks publishing: clip, title.ar, title.en, description.ar, description.en, category, prompt"},"publishedAt":{"type":["string","null"]}},"required":["id","createdAt","updatedAt","slug","slugAr","status","title","description","category","keywords","seo","operation","prompt","suggestedPrompt","slots","badge","featured","order","defaultTier","clip","preview","picture","poster","pending","usage","issues","publishedAt"]},"example":{"id":"01990000-0000-7000-8000-000000000001","createdAt":"2026-09-19T12:00:00.000Z","updatedAt":"2026-09-19T12:00:00.000Z","slug":"example","slugAr":"example","status":"draft","title":{"ar":"مثال","en":"example"},"description":{"ar":"مثال","en":"example"},"category":"example","keywords":{"ar":["example"],"en":["example"]},"seo":{"title":{"ar":"مثال","en":"example"},"description":{"ar":"مثال","en":"example"}},"operation":"add","prompt":"مرحباً بك في فوكلا.","suggestedPrompt":"example","slots":[{"label":{"ar":"مثال","en":"example"},"hint":{"ar":"مثال","en":"example"}}],"badge":"new","featured":true,"order":-9007199254740991,"defaultTier":"example","clip":{"url":"example","poster":"example","durationSeconds":1,"width":-9007199254740991,"height":-9007199254740991,"fps":1,"hasAudio":true,"bytes":-9007199254740991},"preview":{"url":"example","poster":"example","durationSeconds":1,"width":-9007199254740991,"height":-9007199254740991,"fps":1,"hasAudio":true,"bytes":-9007199254740991},"picture":"example","poster":"example","pending":{"clip":{"version":"example","startedAt":"2026-09-19T12:00:00.000Z","error":"example"},"preview":{"version":"example","startedAt":"2026-09-19T12:00:00.000Z","error":"example"}},"usage":{"total":-9007199254740991,"last30d":-9007199254740991,"succeeded":-9007199254740991,"failed":-9007199254740991,"credits":-9007199254740991},"issues":["example"],"publishedAt":"2026-09-19T12:00:00.000Z"}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/video/templates","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/video/templates","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/video/templates","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/video/templates","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/video/templates","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/video/templates","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/video/templates","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/video/templates","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/video/templates","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/video/templates","traceId":"request-id"}}}}}}},"/v1/admin/video/templates/categories":{"put":{"operationId":"adminSaveVideoTemplateCategories","tags":["Admin"],"summary":"Replace the category list (order kept). A category still used by a template cannot be dropped (409). Audit-logged","description":"Requires admin permission content.write. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"X-CSRF-Token","in":"header","required":false,"description":"Required for cookie-authenticated mutations; returned by sign-in/sign-up.","schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"categories":{"minItems":1,"maxItems":40,"type":"array","items":{"type":"object","properties":{"slug":{"type":"string","minLength":2,"maxLength":80,"pattern":"^[a-z0-9]+(?:-[a-z0-9]+)*$"},"name":{"type":"object","properties":{"ar":{"type":"string","minLength":1},"en":{"type":"string","minLength":1}},"required":["ar","en"]},"description":{"type":"object","properties":{"ar":{"type":"string","maxLength":300},"en":{"type":"string","maxLength":300}}}},"required":["slug","name"]}}},"required":["categories"]},"example":{"categories":[{"slug":"example","name":{"ar":"مثال","en":"example"},"description":{"ar":"مثال","en":"example"}}]}}}},"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"items":{"type":"array","items":{"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)$"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"},"slug":{"type":"string"},"slugAr":{"type":["string","null"]},"status":{"type":"string","enum":["draft","published","archived"],"description":"Only published templates with a ready clip are public"},"title":{"type":"object","properties":{"ar":{"type":"string"},"en":{"type":"string"}},"required":["ar","en"]},"description":{"type":"object","properties":{"ar":{"type":"string"},"en":{"type":"string"}},"required":["ar","en"]},"category":{"type":"string"},"keywords":{"type":"object","properties":{"ar":{"type":"array","items":{"type":"string"}},"en":{"type":"array","items":{"type":"string"}}},"required":["ar","en"]},"seo":{"type":"object","properties":{"title":{"type":"object","properties":{"ar":{"type":"string"},"en":{"type":"string"}}},"description":{"type":"object","properties":{"ar":{"type":"string"},"en":{"type":"string"}}}},"required":["title","description"]},"operation":{"type":"string","enum":["add","replace"],"description":"replace = swap the people or objects of the clip for the ones in the photos; add = put what the photos show into the clip"},"prompt":{"type":"string"},"suggestedPrompt":{"type":"string","description":"What is sent when prompt is empty"},"slots":{"type":"array","items":{"type":"object","properties":{"label":{"type":"object","properties":{"ar":{"type":"string","maxLength":60},"en":{"type":"string","maxLength":60}},"required":["ar","en"]},"hint":{"type":"object","properties":{"ar":{"type":"string","maxLength":160},"en":{"type":"string","maxLength":160}}}},"required":["label"]}},"badge":{"anyOf":[{"type":"string","enum":["new","trending","hot","viral"]},{"type":"null"}]},"featured":{"type":"boolean"},"order":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"defaultTier":{"type":["string","null"]},"clip":{"anyOf":[{"type":"object","properties":{"url":{"type":"string"},"poster":{"type":["string","null"]},"durationSeconds":{"type":"number"},"width":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"height":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"fps":{"type":"number"},"hasAudio":{"type":"boolean"},"bytes":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}},"required":["url","poster","durationSeconds","width","height","fps","hasAudio","bytes"]},{"type":"null"}]},"preview":{"anyOf":[{"type":"object","properties":{"url":{"type":"string"},"poster":{"type":["string","null"]},"durationSeconds":{"type":"number"},"width":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"height":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"fps":{"type":"number"},"hasAudio":{"type":"boolean"},"bytes":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}},"required":["url","poster","durationSeconds","width","height","fps","hasAudio","bytes"]},{"type":"null"}]},"picture":{"type":["string","null"]},"poster":{"description":"Uploaded cover (else the clip's own frame)","type":["string","null"]},"pending":{"type":"object","properties":{"clip":{"anyOf":[{"type":"object","properties":{"version":{"type":"string"},"startedAt":{"type":"string"},"error":{"type":["string","null"]}},"required":["version","startedAt","error"]},{"type":"null"}]},"preview":{"anyOf":[{"type":"object","properties":{"version":{"type":"string"},"startedAt":{"type":"string"},"error":{"type":["string","null"]}},"required":["version","startedAt","error"]},{"type":"null"}]}},"required":["clip","preview"],"description":"Uploads the media worker is still preparing (or the error of the last one)"},"usage":{"type":"object","properties":{"total":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"last30d":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"succeeded":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"failed":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"credits":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}},"required":["total","last30d","succeeded","failed","credits"]},"issues":{"type":"array","items":{"type":"string"},"description":"What still blocks publishing: clip, title.ar, title.en, description.ar, description.en, category, prompt"},"publishedAt":{"type":["string","null"]}},"required":["id","createdAt","updatedAt","slug","slugAr","status","title","description","category","keywords","seo","operation","prompt","suggestedPrompt","slots","badge","featured","order","defaultTier","clip","preview","picture","poster","pending","usage","issues","publishedAt"]}},"categories":{"type":"array","items":{"type":"object","properties":{"slug":{"type":"string","minLength":2,"maxLength":80,"pattern":"^[a-z0-9]+(?:-[a-z0-9]+)*$"},"name":{"type":"object","properties":{"ar":{"type":"string","minLength":1},"en":{"type":"string","minLength":1}},"required":["ar","en"]},"description":{"type":"object","properties":{"ar":{"type":"string","maxLength":300},"en":{"type":"string","maxLength":300}}},"count":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Templates of any status"}},"required":["slug","name","count"]}},"maxUploadBytes":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"clip":{"type":"object","properties":{"minSeconds":{"type":"number"},"maxSeconds":{"type":"number"}},"required":["minSeconds","maxSeconds"],"description":"How long a template clip may be (what the model takes)"}},"required":["items","categories","maxUploadBytes","clip"]},"example":{"items":[{"id":"01990000-0000-7000-8000-000000000001","createdAt":"2026-09-19T12:00:00.000Z","updatedAt":"2026-09-19T12:00:00.000Z","slug":"example","slugAr":"example","status":"draft","title":{"ar":"مثال","en":"example"},"description":{"ar":"مثال","en":"example"},"category":"example","keywords":{"ar":["example"],"en":["example"]},"seo":{"title":{"ar":"مثال","en":"example"},"description":{"ar":"مثال","en":"example"}},"operation":"add","prompt":"مرحباً بك في فوكلا.","suggestedPrompt":"example","slots":[{"label":{"ar":"مثال","en":"example"},"hint":{"ar":"مثال","en":"example"}}],"badge":"new","featured":true,"order":-9007199254740991,"defaultTier":"example","clip":{"url":"example","poster":"example","durationSeconds":1,"width":-9007199254740991,"height":-9007199254740991,"fps":1,"hasAudio":true,"bytes":-9007199254740991},"preview":{"url":"example","poster":"example","durationSeconds":1,"width":-9007199254740991,"height":-9007199254740991,"fps":1,"hasAudio":true,"bytes":-9007199254740991},"picture":"example","poster":"example","pending":{"clip":{"version":"example","startedAt":"2026-09-19T12:00:00.000Z","error":"example"},"preview":{"version":"example","startedAt":"2026-09-19T12:00:00.000Z","error":"example"}},"usage":{"total":-9007199254740991,"last30d":-9007199254740991,"succeeded":-9007199254740991,"failed":-9007199254740991,"credits":-9007199254740991},"issues":["example"],"publishedAt":"2026-09-19T12:00:00.000Z"}],"categories":[{"slug":"example","name":{"ar":"مثال","en":"example"},"description":{"ar":"مثال","en":"example"},"count":-9007199254740991}],"maxUploadBytes":-9007199254740991,"clip":{"minSeconds":1,"maxSeconds":1}}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/video/templates/categories","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/video/templates/categories","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/video/templates/categories","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/video/templates/categories","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/video/templates/categories","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/video/templates/categories","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/video/templates/categories","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/video/templates/categories","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/video/templates/categories","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/video/templates/categories","traceId":"request-id"}}}}}}},"/v1/admin/video/templates/{id}":{"get":{"operationId":"adminGetVideoTemplate","tags":["Admin"],"summary":"One template (poll it while an upload is being prepared)","description":"Requires admin permission content.read. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","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)$"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"},"slug":{"type":"string"},"slugAr":{"type":["string","null"]},"status":{"type":"string","enum":["draft","published","archived"],"description":"Only published templates with a ready clip are public"},"title":{"type":"object","properties":{"ar":{"type":"string"},"en":{"type":"string"}},"required":["ar","en"]},"description":{"type":"object","properties":{"ar":{"type":"string"},"en":{"type":"string"}},"required":["ar","en"]},"category":{"type":"string"},"keywords":{"type":"object","properties":{"ar":{"type":"array","items":{"type":"string"}},"en":{"type":"array","items":{"type":"string"}}},"required":["ar","en"]},"seo":{"type":"object","properties":{"title":{"type":"object","properties":{"ar":{"type":"string"},"en":{"type":"string"}}},"description":{"type":"object","properties":{"ar":{"type":"string"},"en":{"type":"string"}}}},"required":["title","description"]},"operation":{"type":"string","enum":["add","replace"],"description":"replace = swap the people or objects of the clip for the ones in the photos; add = put what the photos show into the clip"},"prompt":{"type":"string"},"suggestedPrompt":{"type":"string","description":"What is sent when prompt is empty"},"slots":{"type":"array","items":{"type":"object","properties":{"label":{"type":"object","properties":{"ar":{"type":"string","maxLength":60},"en":{"type":"string","maxLength":60}},"required":["ar","en"]},"hint":{"type":"object","properties":{"ar":{"type":"string","maxLength":160},"en":{"type":"string","maxLength":160}}}},"required":["label"]}},"badge":{"anyOf":[{"type":"string","enum":["new","trending","hot","viral"]},{"type":"null"}]},"featured":{"type":"boolean"},"order":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"defaultTier":{"type":["string","null"]},"clip":{"anyOf":[{"type":"object","properties":{"url":{"type":"string"},"poster":{"type":["string","null"]},"durationSeconds":{"type":"number"},"width":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"height":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"fps":{"type":"number"},"hasAudio":{"type":"boolean"},"bytes":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}},"required":["url","poster","durationSeconds","width","height","fps","hasAudio","bytes"]},{"type":"null"}]},"preview":{"anyOf":[{"type":"object","properties":{"url":{"type":"string"},"poster":{"type":["string","null"]},"durationSeconds":{"type":"number"},"width":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"height":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"fps":{"type":"number"},"hasAudio":{"type":"boolean"},"bytes":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}},"required":["url","poster","durationSeconds","width","height","fps","hasAudio","bytes"]},{"type":"null"}]},"picture":{"type":["string","null"]},"poster":{"description":"Uploaded cover (else the clip's own frame)","type":["string","null"]},"pending":{"type":"object","properties":{"clip":{"anyOf":[{"type":"object","properties":{"version":{"type":"string"},"startedAt":{"type":"string"},"error":{"type":["string","null"]}},"required":["version","startedAt","error"]},{"type":"null"}]},"preview":{"anyOf":[{"type":"object","properties":{"version":{"type":"string"},"startedAt":{"type":"string"},"error":{"type":["string","null"]}},"required":["version","startedAt","error"]},{"type":"null"}]}},"required":["clip","preview"],"description":"Uploads the media worker is still preparing (or the error of the last one)"},"usage":{"type":"object","properties":{"total":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"last30d":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"succeeded":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"failed":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"credits":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}},"required":["total","last30d","succeeded","failed","credits"]},"issues":{"type":"array","items":{"type":"string"},"description":"What still blocks publishing: clip, title.ar, title.en, description.ar, description.en, category, prompt"},"publishedAt":{"type":["string","null"]}},"required":["id","createdAt","updatedAt","slug","slugAr","status","title","description","category","keywords","seo","operation","prompt","suggestedPrompt","slots","badge","featured","order","defaultTier","clip","preview","picture","poster","pending","usage","issues","publishedAt"]},"example":{"id":"01990000-0000-7000-8000-000000000001","createdAt":"2026-09-19T12:00:00.000Z","updatedAt":"2026-09-19T12:00:00.000Z","slug":"example","slugAr":"example","status":"draft","title":{"ar":"مثال","en":"example"},"description":{"ar":"مثال","en":"example"},"category":"example","keywords":{"ar":["example"],"en":["example"]},"seo":{"title":{"ar":"مثال","en":"example"},"description":{"ar":"مثال","en":"example"}},"operation":"add","prompt":"مرحباً بك في فوكلا.","suggestedPrompt":"example","slots":[{"label":{"ar":"مثال","en":"example"},"hint":{"ar":"مثال","en":"example"}}],"badge":"new","featured":true,"order":-9007199254740991,"defaultTier":"example","clip":{"url":"example","poster":"example","durationSeconds":1,"width":-9007199254740991,"height":-9007199254740991,"fps":1,"hasAudio":true,"bytes":-9007199254740991},"preview":{"url":"example","poster":"example","durationSeconds":1,"width":-9007199254740991,"height":-9007199254740991,"fps":1,"hasAudio":true,"bytes":-9007199254740991},"picture":"example","poster":"example","pending":{"clip":{"version":"example","startedAt":"2026-09-19T12:00:00.000Z","error":"example"},"preview":{"version":"example","startedAt":"2026-09-19T12:00:00.000Z","error":"example"}},"usage":{"total":-9007199254740991,"last30d":-9007199254740991,"succeeded":-9007199254740991,"failed":-9007199254740991,"credits":-9007199254740991},"issues":["example"],"publishedAt":"2026-09-19T12:00:00.000Z"}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/video/templates/{id}","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/video/templates/{id}","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/video/templates/{id}","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/video/templates/{id}","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/video/templates/{id}","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/video/templates/{id}","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/video/templates/{id}","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/video/templates/{id}","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/video/templates/{id}","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/video/templates/{id}","traceId":"request-id"}}}}}},"patch":{"operationId":"adminUpdateVideoTemplate","tags":["Admin"],"summary":"Edit a template, publish it, send it back to draft or archive it. Audit-logged; a change the landing shows queues a rebuild","description":"Requires admin permission content.write. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"X-CSRF-Token","in":"header","required":false,"description":"Required for cookie-authenticated mutations; returned by sign-in/sign-up.","schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"slug":{"type":"string","minLength":2,"maxLength":80,"pattern":"^[a-z0-9]+(?:-[a-z0-9]+)*$"},"slugAr":{"anyOf":[{"type":"string","minLength":2,"maxLength":120,"pattern":"^[ء-ي0-9]+(?:-[ء-ي0-9]+)*$"},{"type":"null"}]},"title":{"type":"object","properties":{"ar":{"type":"string","maxLength":120},"en":{"type":"string","maxLength":120}},"required":["ar","en"]},"description":{"type":"object","properties":{"ar":{"type":"string","maxLength":800},"en":{"type":"string","maxLength":800}},"required":["ar","en"]},"category":{"type":"string","minLength":2,"maxLength":80,"pattern":"^[a-z0-9]+(?:-[a-z0-9]+)*$"},"keywords":{"type":"object","properties":{"ar":{"maxItems":30,"type":"array","items":{"type":"string","minLength":1,"maxLength":80}},"en":{"maxItems":30,"type":"array","items":{"type":"string","minLength":1,"maxLength":80}}},"required":["ar","en"]},"seo":{"type":"object","properties":{"title":{"type":"object","properties":{"ar":{"type":"string","maxLength":120},"en":{"type":"string","maxLength":120}}},"description":{"type":"object","properties":{"ar":{"type":"string","maxLength":320},"en":{"type":"string","maxLength":320}}}},"required":["title","description"]},"operation":{"type":"string","enum":["add","replace"],"description":"replace = swap the people or objects of the clip for the ones in the photos; add = put what the photos show into the clip"},"prompt":{"type":"string","maxLength":2400,"description":"The English instruction sent to the model: @Video1 is the clip, @Image1..@Image4 the photos in slot order. Empty = the suggested instruction for the action and number of slots"},"slots":{"minItems":1,"maxItems":4,"type":"array","items":{"type":"object","properties":{"label":{"type":"object","properties":{"ar":{"type":"string","maxLength":60},"en":{"type":"string","maxLength":60}},"required":["ar","en"]},"hint":{"type":"object","properties":{"ar":{"type":"string","maxLength":160},"en":{"type":"string","maxLength":160}}}},"required":["label"]}},"badge":{"anyOf":[{"type":"string","enum":["new","trending","hot","viral"]},{"type":"null"}]},"featured":{"type":"boolean"},"order":{"type":"integer","minimum":0,"maximum":100000,"description":"Lower shows first"},"defaultTier":{"anyOf":[{"type":"string","minLength":1,"maxLength":100},{"type":"null"}],"description":"Edit tier preselected in the studio"},"status":{"description":"published needs a ready clip and the title and description in both languages (422 lists what is missing)","type":"string","enum":["draft","published","archived"]},"removePreview":{"type":"boolean"},"removePicture":{"type":"boolean"},"removePoster":{"type":"boolean"}}},"example":{"slug":"example","slugAr":"example","title":{"ar":"مثال","en":"example"},"description":{"ar":"مثال","en":"example"},"category":"example","keywords":{"ar":["example"],"en":["example"]},"seo":{"title":{"ar":"مثال","en":"example"},"description":{"ar":"مثال","en":"example"}},"operation":"add","prompt":"مرحباً بك في فوكلا.","slots":[{"label":{"ar":"مثال","en":"example"},"hint":{"ar":"مثال","en":"example"}}],"badge":"new","featured":true,"order":0,"defaultTier":"example","status":"draft","removePreview":true,"removePicture":true,"removePoster":true}}}},"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","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)$"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"},"slug":{"type":"string"},"slugAr":{"type":["string","null"]},"status":{"type":"string","enum":["draft","published","archived"],"description":"Only published templates with a ready clip are public"},"title":{"type":"object","properties":{"ar":{"type":"string"},"en":{"type":"string"}},"required":["ar","en"]},"description":{"type":"object","properties":{"ar":{"type":"string"},"en":{"type":"string"}},"required":["ar","en"]},"category":{"type":"string"},"keywords":{"type":"object","properties":{"ar":{"type":"array","items":{"type":"string"}},"en":{"type":"array","items":{"type":"string"}}},"required":["ar","en"]},"seo":{"type":"object","properties":{"title":{"type":"object","properties":{"ar":{"type":"string"},"en":{"type":"string"}}},"description":{"type":"object","properties":{"ar":{"type":"string"},"en":{"type":"string"}}}},"required":["title","description"]},"operation":{"type":"string","enum":["add","replace"],"description":"replace = swap the people or objects of the clip for the ones in the photos; add = put what the photos show into the clip"},"prompt":{"type":"string"},"suggestedPrompt":{"type":"string","description":"What is sent when prompt is empty"},"slots":{"type":"array","items":{"type":"object","properties":{"label":{"type":"object","properties":{"ar":{"type":"string","maxLength":60},"en":{"type":"string","maxLength":60}},"required":["ar","en"]},"hint":{"type":"object","properties":{"ar":{"type":"string","maxLength":160},"en":{"type":"string","maxLength":160}}}},"required":["label"]}},"badge":{"anyOf":[{"type":"string","enum":["new","trending","hot","viral"]},{"type":"null"}]},"featured":{"type":"boolean"},"order":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"defaultTier":{"type":["string","null"]},"clip":{"anyOf":[{"type":"object","properties":{"url":{"type":"string"},"poster":{"type":["string","null"]},"durationSeconds":{"type":"number"},"width":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"height":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"fps":{"type":"number"},"hasAudio":{"type":"boolean"},"bytes":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}},"required":["url","poster","durationSeconds","width","height","fps","hasAudio","bytes"]},{"type":"null"}]},"preview":{"anyOf":[{"type":"object","properties":{"url":{"type":"string"},"poster":{"type":["string","null"]},"durationSeconds":{"type":"number"},"width":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"height":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"fps":{"type":"number"},"hasAudio":{"type":"boolean"},"bytes":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}},"required":["url","poster","durationSeconds","width","height","fps","hasAudio","bytes"]},{"type":"null"}]},"picture":{"type":["string","null"]},"poster":{"description":"Uploaded cover (else the clip's own frame)","type":["string","null"]},"pending":{"type":"object","properties":{"clip":{"anyOf":[{"type":"object","properties":{"version":{"type":"string"},"startedAt":{"type":"string"},"error":{"type":["string","null"]}},"required":["version","startedAt","error"]},{"type":"null"}]},"preview":{"anyOf":[{"type":"object","properties":{"version":{"type":"string"},"startedAt":{"type":"string"},"error":{"type":["string","null"]}},"required":["version","startedAt","error"]},{"type":"null"}]}},"required":["clip","preview"],"description":"Uploads the media worker is still preparing (or the error of the last one)"},"usage":{"type":"object","properties":{"total":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"last30d":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"succeeded":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"failed":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"credits":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}},"required":["total","last30d","succeeded","failed","credits"]},"issues":{"type":"array","items":{"type":"string"},"description":"What still blocks publishing: clip, title.ar, title.en, description.ar, description.en, category, prompt"},"publishedAt":{"type":["string","null"]}},"required":["id","createdAt","updatedAt","slug","slugAr","status","title","description","category","keywords","seo","operation","prompt","suggestedPrompt","slots","badge","featured","order","defaultTier","clip","preview","picture","poster","pending","usage","issues","publishedAt"]},"example":{"id":"01990000-0000-7000-8000-000000000001","createdAt":"2026-09-19T12:00:00.000Z","updatedAt":"2026-09-19T12:00:00.000Z","slug":"example","slugAr":"example","status":"draft","title":{"ar":"مثال","en":"example"},"description":{"ar":"مثال","en":"example"},"category":"example","keywords":{"ar":["example"],"en":["example"]},"seo":{"title":{"ar":"مثال","en":"example"},"description":{"ar":"مثال","en":"example"}},"operation":"add","prompt":"مرحباً بك في فوكلا.","suggestedPrompt":"example","slots":[{"label":{"ar":"مثال","en":"example"},"hint":{"ar":"مثال","en":"example"}}],"badge":"new","featured":true,"order":-9007199254740991,"defaultTier":"example","clip":{"url":"example","poster":"example","durationSeconds":1,"width":-9007199254740991,"height":-9007199254740991,"fps":1,"hasAudio":true,"bytes":-9007199254740991},"preview":{"url":"example","poster":"example","durationSeconds":1,"width":-9007199254740991,"height":-9007199254740991,"fps":1,"hasAudio":true,"bytes":-9007199254740991},"picture":"example","poster":"example","pending":{"clip":{"version":"example","startedAt":"2026-09-19T12:00:00.000Z","error":"example"},"preview":{"version":"example","startedAt":"2026-09-19T12:00:00.000Z","error":"example"}},"usage":{"total":-9007199254740991,"last30d":-9007199254740991,"succeeded":-9007199254740991,"failed":-9007199254740991,"credits":-9007199254740991},"issues":["example"],"publishedAt":"2026-09-19T12:00:00.000Z"}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/video/templates/{id}","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/video/templates/{id}","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/video/templates/{id}","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/video/templates/{id}","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/video/templates/{id}","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/video/templates/{id}","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/video/templates/{id}","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/video/templates/{id}","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/video/templates/{id}","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/video/templates/{id}","traceId":"request-id"}}}}}},"delete":{"operationId":"adminDeleteVideoTemplate","tags":["Admin"],"summary":"Delete a template (edits made from it are kept); its slug becomes free. Audit-logged","description":"Requires admin permission content.write. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"X-CSRF-Token","in":"header","required":false,"description":"Required for cookie-authenticated mutations; returned by sign-in/sign-up.","schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"ok":{"type":"boolean"}},"required":["ok"]},"example":{"ok":true}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/video/templates/{id}","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/video/templates/{id}","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/video/templates/{id}","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/video/templates/{id}","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/video/templates/{id}","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/video/templates/{id}","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/video/templates/{id}","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/video/templates/{id}","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/video/templates/{id}","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/video/templates/{id}","traceId":"request-id"}}}}}}},"/v1/admin/video/templates/{id}/upload":{"post":{"operationId":"adminUploadVideoTemplateMedia","tags":["Admin"],"summary":"Upload a template's clip, example result, example photo or cover. Videos are prepared by the media worker: poll the template until pending is null","description":"Requires admin permission content.write. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"X-CSRF-Token","in":"header","required":false,"description":"Required for cookie-authenticated mutations; returned by sign-in/sign-up.","schema":{"type":"string"}},{"name":"kind","in":"query","required":false,"schema":{"default":"clip","description":"clip = the MP4 people edit (3 to 15 seconds, at most 50 MB; conformed by the media worker); preview = an example result MP4; picture = the photo used for the example (JPEG/PNG/WebP, at most 2 MB); poster = a cover image for the cards","type":"string","enum":["clip","preview","picture","poster"]}}],"security":[{"session":[]},{"apiKey":[]}],"requestBody":{"required":true,"content":{"application/octet-stream":{"schema":{"type":"string","format":"binary"}}}},"responses":{"202":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","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)$"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"},"slug":{"type":"string"},"slugAr":{"type":["string","null"]},"status":{"type":"string","enum":["draft","published","archived"],"description":"Only published templates with a ready clip are public"},"title":{"type":"object","properties":{"ar":{"type":"string"},"en":{"type":"string"}},"required":["ar","en"]},"description":{"type":"object","properties":{"ar":{"type":"string"},"en":{"type":"string"}},"required":["ar","en"]},"category":{"type":"string"},"keywords":{"type":"object","properties":{"ar":{"type":"array","items":{"type":"string"}},"en":{"type":"array","items":{"type":"string"}}},"required":["ar","en"]},"seo":{"type":"object","properties":{"title":{"type":"object","properties":{"ar":{"type":"string"},"en":{"type":"string"}}},"description":{"type":"object","properties":{"ar":{"type":"string"},"en":{"type":"string"}}}},"required":["title","description"]},"operation":{"type":"string","enum":["add","replace"],"description":"replace = swap the people or objects of the clip for the ones in the photos; add = put what the photos show into the clip"},"prompt":{"type":"string"},"suggestedPrompt":{"type":"string","description":"What is sent when prompt is empty"},"slots":{"type":"array","items":{"type":"object","properties":{"label":{"type":"object","properties":{"ar":{"type":"string","maxLength":60},"en":{"type":"string","maxLength":60}},"required":["ar","en"]},"hint":{"type":"object","properties":{"ar":{"type":"string","maxLength":160},"en":{"type":"string","maxLength":160}}}},"required":["label"]}},"badge":{"anyOf":[{"type":"string","enum":["new","trending","hot","viral"]},{"type":"null"}]},"featured":{"type":"boolean"},"order":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"defaultTier":{"type":["string","null"]},"clip":{"anyOf":[{"type":"object","properties":{"url":{"type":"string"},"poster":{"type":["string","null"]},"durationSeconds":{"type":"number"},"width":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"height":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"fps":{"type":"number"},"hasAudio":{"type":"boolean"},"bytes":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}},"required":["url","poster","durationSeconds","width","height","fps","hasAudio","bytes"]},{"type":"null"}]},"preview":{"anyOf":[{"type":"object","properties":{"url":{"type":"string"},"poster":{"type":["string","null"]},"durationSeconds":{"type":"number"},"width":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"height":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"fps":{"type":"number"},"hasAudio":{"type":"boolean"},"bytes":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}},"required":["url","poster","durationSeconds","width","height","fps","hasAudio","bytes"]},{"type":"null"}]},"picture":{"type":["string","null"]},"poster":{"description":"Uploaded cover (else the clip's own frame)","type":["string","null"]},"pending":{"type":"object","properties":{"clip":{"anyOf":[{"type":"object","properties":{"version":{"type":"string"},"startedAt":{"type":"string"},"error":{"type":["string","null"]}},"required":["version","startedAt","error"]},{"type":"null"}]},"preview":{"anyOf":[{"type":"object","properties":{"version":{"type":"string"},"startedAt":{"type":"string"},"error":{"type":["string","null"]}},"required":["version","startedAt","error"]},{"type":"null"}]}},"required":["clip","preview"],"description":"Uploads the media worker is still preparing (or the error of the last one)"},"usage":{"type":"object","properties":{"total":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"last30d":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"succeeded":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"failed":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"credits":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}},"required":["total","last30d","succeeded","failed","credits"]},"issues":{"type":"array","items":{"type":"string"},"description":"What still blocks publishing: clip, title.ar, title.en, description.ar, description.en, category, prompt"},"publishedAt":{"type":["string","null"]}},"required":["id","createdAt","updatedAt","slug","slugAr","status","title","description","category","keywords","seo","operation","prompt","suggestedPrompt","slots","badge","featured","order","defaultTier","clip","preview","picture","poster","pending","usage","issues","publishedAt"]},"example":{"id":"01990000-0000-7000-8000-000000000001","createdAt":"2026-09-19T12:00:00.000Z","updatedAt":"2026-09-19T12:00:00.000Z","slug":"example","slugAr":"example","status":"draft","title":{"ar":"مثال","en":"example"},"description":{"ar":"مثال","en":"example"},"category":"example","keywords":{"ar":["example"],"en":["example"]},"seo":{"title":{"ar":"مثال","en":"example"},"description":{"ar":"مثال","en":"example"}},"operation":"add","prompt":"مرحباً بك في فوكلا.","suggestedPrompt":"example","slots":[{"label":{"ar":"مثال","en":"example"},"hint":{"ar":"مثال","en":"example"}}],"badge":"new","featured":true,"order":-9007199254740991,"defaultTier":"example","clip":{"url":"example","poster":"example","durationSeconds":1,"width":-9007199254740991,"height":-9007199254740991,"fps":1,"hasAudio":true,"bytes":-9007199254740991},"preview":{"url":"example","poster":"example","durationSeconds":1,"width":-9007199254740991,"height":-9007199254740991,"fps":1,"hasAudio":true,"bytes":-9007199254740991},"picture":"example","poster":"example","pending":{"clip":{"version":"example","startedAt":"2026-09-19T12:00:00.000Z","error":"example"},"preview":{"version":"example","startedAt":"2026-09-19T12:00:00.000Z","error":"example"}},"usage":{"total":-9007199254740991,"last30d":-9007199254740991,"succeeded":-9007199254740991,"failed":-9007199254740991,"credits":-9007199254740991},"issues":["example"],"publishedAt":"2026-09-19T12:00:00.000Z"}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/video/templates/{id}/upload","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/video/templates/{id}/upload","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/video/templates/{id}/upload","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/video/templates/{id}/upload","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/video/templates/{id}/upload","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/video/templates/{id}/upload","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/video/templates/{id}/upload","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/video/templates/{id}/upload","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/video/templates/{id}/upload","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/video/templates/{id}/upload","traceId":"request-id"}}}}}}},"/v1/admin/video/pricing":{"get":{"operationId":"adminGetVideoPricing","tags":["Admin"],"summary":"Credits per AI storyboard still and for the music bed (app_settings videoPricing), with the defaults","description":"Requires admin permission models.read. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false}],"security":[{"session":[]},{"apiKey":[]}],"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"storyboardStillCredits":{"type":"integer","minimum":0,"maximum":100000,"description":"Credits per AI storyboard still a render includes (photos the user uploads as stills are free)"},"musicBedCredits":{"type":"integer","minimum":0,"maximum":100000,"description":"Credits for the music bed (a speech model fixedCredits.musicBed overrides it)"},"defaults":{"type":"object","properties":{"storyboardStillCredits":{"type":"integer","minimum":0,"maximum":100000,"description":"Credits per AI storyboard still a render includes (photos the user uploads as stills are free)"},"musicBedCredits":{"type":"integer","minimum":0,"maximum":100000,"description":"Credits for the music bed (a speech model fixedCredits.musicBed overrides it)"}},"required":["storyboardStillCredits","musicBedCredits"]},"updatedAt":{"type":["string","null"]}},"required":["storyboardStillCredits","musicBedCredits","defaults","updatedAt"]},"example":{"storyboardStillCredits":0,"musicBedCredits":0,"defaults":{"storyboardStillCredits":0,"musicBedCredits":0},"updatedAt":"2026-09-19T12:00:00.000Z"}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/video/pricing","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/video/pricing","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/video/pricing","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/video/pricing","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/video/pricing","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/video/pricing","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/video/pricing","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/video/pricing","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/video/pricing","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/video/pricing","traceId":"request-id"}}}}}},"put":{"operationId":"adminUpdateVideoPricing","tags":["Admin"],"summary":"Set the credits per AI storyboard still and for the music bed (0–100000 each); quotes use them within seconds. Audit-logged","description":"Requires admin permission models.write. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"X-CSRF-Token","in":"header","required":false,"description":"Required for cookie-authenticated mutations; returned by sign-in/sign-up.","schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"storyboardStillCredits":{"type":"integer","minimum":0,"maximum":100000,"description":"Credits per AI storyboard still a render includes (photos the user uploads as stills are free)"},"musicBedCredits":{"type":"integer","minimum":0,"maximum":100000,"description":"Credits for the music bed (a speech model fixedCredits.musicBed overrides it)"}},"required":["storyboardStillCredits","musicBedCredits"]},"example":{"storyboardStillCredits":0,"musicBedCredits":0}}}},"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"storyboardStillCredits":{"type":"integer","minimum":0,"maximum":100000,"description":"Credits per AI storyboard still a render includes (photos the user uploads as stills are free)"},"musicBedCredits":{"type":"integer","minimum":0,"maximum":100000,"description":"Credits for the music bed (a speech model fixedCredits.musicBed overrides it)"},"defaults":{"type":"object","properties":{"storyboardStillCredits":{"type":"integer","minimum":0,"maximum":100000,"description":"Credits per AI storyboard still a render includes (photos the user uploads as stills are free)"},"musicBedCredits":{"type":"integer","minimum":0,"maximum":100000,"description":"Credits for the music bed (a speech model fixedCredits.musicBed overrides it)"}},"required":["storyboardStillCredits","musicBedCredits"]},"updatedAt":{"type":["string","null"]}},"required":["storyboardStillCredits","musicBedCredits","defaults","updatedAt"]},"example":{"storyboardStillCredits":0,"musicBedCredits":0,"defaults":{"storyboardStillCredits":0,"musicBedCredits":0},"updatedAt":"2026-09-19T12:00:00.000Z"}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/video/pricing","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/video/pricing","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/video/pricing","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/video/pricing","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/video/pricing","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/video/pricing","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/video/pricing","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/video/pricing","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/video/pricing","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/video/pricing","traceId":"request-id"}}}}}}},"/v1/admin/cartoon/themes":{"get":{"operationId":"adminListCartoonThemes","tags":["Admin"],"summary":"Every Cartoon studio series and style (switched-off ones included) in display order","description":"Requires admin permission content.read. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false}],"security":[{"session":[]},{"apiKey":[]}],"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"items":{"type":"array","items":{"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)$"},"slug":{"type":"string"},"data":{"type":"object","properties":{"kind":{"type":"string","enum":["series","style"]},"planet":{"default":null,"anyOf":[{"type":"string","enum":["action","adventure","sports","comedy","zumurruda","science","bonbon","heroes"]},{"type":"null"}]},"name":{"type":"object","properties":{"ar":{"type":"string","minLength":1},"en":{"type":"string","minLength":1}},"required":["ar","en"]},"tagline":{"type":"object","properties":{"ar":{"type":"string","minLength":1},"en":{"type":"string","minLength":1}},"required":["ar","en"]},"colors":{"type":"object","properties":{"from":{"type":"string","pattern":"^#[0-9a-fA-F]{6}$"},"to":{"type":"string","pattern":"^#[0-9a-fA-F]{6}$"},"accent":{"type":"string","pattern":"^#[0-9a-fA-F]{6}$"}},"required":["from","to","accent"]},"emoji":{"default":"🎬","type":"string","maxLength":8},"jingle":{"default":"anime","type":"string","enum":["mystery","heroic","sports","mecha","tearjerker","pirate","power","creature","slapstick","anime","retro","family","kawaii","storybook","kids","adventure"]},"coverKey":{"default":null,"anyOf":[{"type":"string","maxLength":400},{"type":"null"}]},"sampleKey":{"default":null,"description":"A short sample clip with sound (public bucket)","anyOf":[{"type":"string","maxLength":400},{"type":"null"}]},"loopKey":{"default":null,"description":"A short silent looping clip shown instead of the emoji (always played muted)","anyOf":[{"type":"string","maxLength":400},{"type":"null"}]},"look":{"type":"string","minLength":1,"maxLength":1500,"description":"English visual style for every image and clip"},"characterRules":{"default":"","type":"string","maxLength":800},"camera":{"default":"","type":"string","maxLength":800},"formula":{"type":"string","minLength":1,"maxLength":2000,"description":"English story formula the screenplay follows beat by beat"},"dialect":{"default":"ar","description":"Default dialect (ar = Fusha, the classic dub)","type":"string","minLength":2,"maxLength":20},"narrator":{"default":{"enabled":false,"voiceId":null,"style":""},"type":"object","properties":{"enabled":{"default":false,"type":"boolean"},"voiceId":{"default":null,"anyOf":[{"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)$"},{"type":"null"}]},"style":{"default":"","type":"string","maxLength":300}}},"music":{"type":"object","properties":{"score":{"type":"string","minLength":1,"maxLength":600},"stinger":{"default":"","type":"string","maxLength":400},"opening":{"default":"","type":"string","maxLength":600}},"required":["score"]},"sfx":{"type":"object","properties":{"tags":{"default":[],"maxItems":40,"type":"array","items":{"type":"string","minLength":1,"maxLength":40}},"signature":{"default":[],"maxItems":20,"type":"array","items":{"type":"string","minLength":1,"maxLength":200}},"cutWhoosh":{"default":false,"type":"boolean"}}},"ideas":{"default":[],"maxItems":12,"type":"array","items":{"type":"object","properties":{"ar":{"type":"string","minLength":1},"en":{"type":"string","minLength":1}},"required":["ar","en"]}},"cast":{"default":[],"maxItems":16,"type":"array","items":{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":40,"pattern":"^[a-z0-9-]+$"},"name":{"type":"object","properties":{"ar":{"type":"string","minLength":1},"en":{"type":"string","minLength":1}},"required":["ar","en"]},"appearance":{"type":"string","minLength":1,"maxLength":600,"description":"English description the image model draws (hair, outfit, colours, build)"},"personality":{"default":"","type":"string","maxLength":300},"gender":{"type":"string","enum":["male","female"]},"age":{"type":"string","enum":["child","teen","adult","elder"]},"voiceId":{"default":null,"description":"Default voice (Cartoon category)","anyOf":[{"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)$"},{"type":"null"}]},"voiceFx":{"default":"none","type":"string","enum":["none","chibi","giant","robot","alien","radio","echo","monster"]},"imageKey":{"default":null,"description":"Reference picture uploaded by an admin (public bucket, cartoon/…)","anyOf":[{"type":"string","maxLength":400},{"type":"null"}]}},"required":["id","name","appearance","gender","age"]}},"tier":{"default":null,"description":"Preferred video tier slug","anyOf":[{"type":"string","maxLength":100},{"type":"null"}]},"occasion":{"default":null,"description":"A Birthday Hero adventure (docs/BIRTHDAY_HERO.md): offered only on that page, never in the studio picker","anyOf":[{"type":"string","enum":["birthday"]},{"type":"null"}]},"enabled":{"default":true,"type":"boolean"},"order":{"default":100,"type":"integer","minimum":0,"maximum":10000}},"required":["kind","name","tagline","colors","look","formula","music","sfx"]},"coverUrl":{"type":["string","null"]},"sampleUrl":{"type":["string","null"]},"loopUrl":{"type":["string","null"]},"castImages":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":["string","null"]}},"updatedAt":{"type":"string"}},"required":["id","slug","data","coverUrl","sampleUrl","loopUrl","castImages","updatedAt"]}}},"required":["items"]},"example":{"items":[{"id":"01990000-0000-7000-8000-000000000001","slug":"example","data":{"kind":"series","planet":null,"name":{"ar":"مثال","en":"example"},"tagline":{"ar":"مثال","en":"example"},"colors":{"from":"example","to":"example","accent":"example"},"emoji":"🎬","jingle":"anime","coverKey":null,"sampleKey":null,"loopKey":null,"look":"example","characterRules":"","camera":"","formula":"example","dialect":"ar","narrator":{"enabled":false,"voiceId":null,"style":""},"music":{"score":"example","stinger":"","opening":""},"sfx":{"tags":[],"signature":[],"cutWhoosh":false},"ideas":[],"cast":[],"tier":null,"occasion":null,"enabled":true,"order":100},"coverUrl":"http://localhost:4000/example","sampleUrl":"http://localhost:4000/example","loopUrl":"http://localhost:4000/example","castImages":{},"updatedAt":"2026-09-19T12:00:00.000Z"}]}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/cartoon/themes","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/cartoon/themes","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/cartoon/themes","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/cartoon/themes","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/cartoon/themes","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/cartoon/themes","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/cartoon/themes","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/cartoon/themes","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/cartoon/themes","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/cartoon/themes","traceId":"request-id"}}}}}},"post":{"operationId":"adminCreateCartoonTheme","tags":["Admin"],"summary":"Add a series or style. 409 when the slug is taken. Audit-logged","description":"Requires admin permission content.write. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"X-CSRF-Token","in":"header","required":false,"description":"Required for cookie-authenticated mutations; returned by sign-in/sign-up.","schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"slug":{"type":"string","minLength":1,"maxLength":80,"pattern":"^[a-z0-9-]+$"},"data":{"type":"object","properties":{"kind":{"type":"string","enum":["series","style"]},"planet":{"default":null,"anyOf":[{"type":"string","enum":["action","adventure","sports","comedy","zumurruda","science","bonbon","heroes"]},{"type":"null"}]},"name":{"type":"object","properties":{"ar":{"type":"string","minLength":1},"en":{"type":"string","minLength":1}},"required":["ar","en"]},"tagline":{"type":"object","properties":{"ar":{"type":"string","minLength":1},"en":{"type":"string","minLength":1}},"required":["ar","en"]},"colors":{"type":"object","properties":{"from":{"type":"string","pattern":"^#[0-9a-fA-F]{6}$"},"to":{"type":"string","pattern":"^#[0-9a-fA-F]{6}$"},"accent":{"type":"string","pattern":"^#[0-9a-fA-F]{6}$"}},"required":["from","to","accent"]},"emoji":{"default":"🎬","type":"string","maxLength":8},"jingle":{"default":"anime","type":"string","enum":["mystery","heroic","sports","mecha","tearjerker","pirate","power","creature","slapstick","anime","retro","family","kawaii","storybook","kids","adventure"]},"coverKey":{"default":null,"anyOf":[{"type":"string","maxLength":400},{"type":"null"}]},"sampleKey":{"default":null,"description":"A short sample clip with sound (public bucket)","anyOf":[{"type":"string","maxLength":400},{"type":"null"}]},"loopKey":{"default":null,"description":"A short silent looping clip shown instead of the emoji (always played muted)","anyOf":[{"type":"string","maxLength":400},{"type":"null"}]},"look":{"type":"string","minLength":1,"maxLength":1500,"description":"English visual style for every image and clip"},"characterRules":{"default":"","type":"string","maxLength":800},"camera":{"default":"","type":"string","maxLength":800},"formula":{"type":"string","minLength":1,"maxLength":2000,"description":"English story formula the screenplay follows beat by beat"},"dialect":{"default":"ar","description":"Default dialect (ar = Fusha, the classic dub)","type":"string","minLength":2,"maxLength":20},"narrator":{"default":{"enabled":false,"voiceId":null,"style":""},"type":"object","properties":{"enabled":{"default":false,"type":"boolean"},"voiceId":{"default":null,"anyOf":[{"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)$"},{"type":"null"}]},"style":{"default":"","type":"string","maxLength":300}}},"music":{"type":"object","properties":{"score":{"type":"string","minLength":1,"maxLength":600},"stinger":{"default":"","type":"string","maxLength":400},"opening":{"default":"","type":"string","maxLength":600}},"required":["score"]},"sfx":{"type":"object","properties":{"tags":{"default":[],"maxItems":40,"type":"array","items":{"type":"string","minLength":1,"maxLength":40}},"signature":{"default":[],"maxItems":20,"type":"array","items":{"type":"string","minLength":1,"maxLength":200}},"cutWhoosh":{"default":false,"type":"boolean"}}},"ideas":{"default":[],"maxItems":12,"type":"array","items":{"type":"object","properties":{"ar":{"type":"string","minLength":1},"en":{"type":"string","minLength":1}},"required":["ar","en"]}},"cast":{"default":[],"maxItems":16,"type":"array","items":{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":40,"pattern":"^[a-z0-9-]+$"},"name":{"type":"object","properties":{"ar":{"type":"string","minLength":1},"en":{"type":"string","minLength":1}},"required":["ar","en"]},"appearance":{"type":"string","minLength":1,"maxLength":600,"description":"English description the image model draws (hair, outfit, colours, build)"},"personality":{"default":"","type":"string","maxLength":300},"gender":{"type":"string","enum":["male","female"]},"age":{"type":"string","enum":["child","teen","adult","elder"]},"voiceId":{"default":null,"description":"Default voice (Cartoon category)","anyOf":[{"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)$"},{"type":"null"}]},"voiceFx":{"default":"none","type":"string","enum":["none","chibi","giant","robot","alien","radio","echo","monster"]},"imageKey":{"default":null,"description":"Reference picture uploaded by an admin (public bucket, cartoon/…)","anyOf":[{"type":"string","maxLength":400},{"type":"null"}]}},"required":["id","name","appearance","gender","age"]}},"tier":{"default":null,"description":"Preferred video tier slug","anyOf":[{"type":"string","maxLength":100},{"type":"null"}]},"occasion":{"default":null,"description":"A Birthday Hero adventure (docs/BIRTHDAY_HERO.md): offered only on that page, never in the studio picker","anyOf":[{"type":"string","enum":["birthday"]},{"type":"null"}]},"enabled":{"default":true,"type":"boolean"},"order":{"default":100,"type":"integer","minimum":0,"maximum":10000}},"required":["kind","name","tagline","colors","look","formula","music","sfx"]}},"required":["slug","data"]},"example":{"slug":"example","data":{"kind":"series","planet":null,"name":{"ar":"مثال","en":"example"},"tagline":{"ar":"مثال","en":"example"},"colors":{"from":"example","to":"example","accent":"example"},"emoji":"🎬","jingle":"anime","coverKey":null,"sampleKey":null,"loopKey":null,"look":"example","characterRules":"","camera":"","formula":"example","dialect":"ar","narrator":{"enabled":false,"voiceId":null,"style":""},"music":{"score":"example","stinger":"","opening":""},"sfx":{"tags":[],"signature":[],"cutWhoosh":false},"ideas":[],"cast":[],"tier":null,"occasion":null,"enabled":true,"order":100}}}}},"responses":{"201":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","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)$"},"slug":{"type":"string"},"data":{"type":"object","properties":{"kind":{"type":"string","enum":["series","style"]},"planet":{"default":null,"anyOf":[{"type":"string","enum":["action","adventure","sports","comedy","zumurruda","science","bonbon","heroes"]},{"type":"null"}]},"name":{"type":"object","properties":{"ar":{"type":"string","minLength":1},"en":{"type":"string","minLength":1}},"required":["ar","en"]},"tagline":{"type":"object","properties":{"ar":{"type":"string","minLength":1},"en":{"type":"string","minLength":1}},"required":["ar","en"]},"colors":{"type":"object","properties":{"from":{"type":"string","pattern":"^#[0-9a-fA-F]{6}$"},"to":{"type":"string","pattern":"^#[0-9a-fA-F]{6}$"},"accent":{"type":"string","pattern":"^#[0-9a-fA-F]{6}$"}},"required":["from","to","accent"]},"emoji":{"default":"🎬","type":"string","maxLength":8},"jingle":{"default":"anime","type":"string","enum":["mystery","heroic","sports","mecha","tearjerker","pirate","power","creature","slapstick","anime","retro","family","kawaii","storybook","kids","adventure"]},"coverKey":{"default":null,"anyOf":[{"type":"string","maxLength":400},{"type":"null"}]},"sampleKey":{"default":null,"description":"A short sample clip with sound (public bucket)","anyOf":[{"type":"string","maxLength":400},{"type":"null"}]},"loopKey":{"default":null,"description":"A short silent looping clip shown instead of the emoji (always played muted)","anyOf":[{"type":"string","maxLength":400},{"type":"null"}]},"look":{"type":"string","minLength":1,"maxLength":1500,"description":"English visual style for every image and clip"},"characterRules":{"default":"","type":"string","maxLength":800},"camera":{"default":"","type":"string","maxLength":800},"formula":{"type":"string","minLength":1,"maxLength":2000,"description":"English story formula the screenplay follows beat by beat"},"dialect":{"default":"ar","description":"Default dialect (ar = Fusha, the classic dub)","type":"string","minLength":2,"maxLength":20},"narrator":{"default":{"enabled":false,"voiceId":null,"style":""},"type":"object","properties":{"enabled":{"default":false,"type":"boolean"},"voiceId":{"default":null,"anyOf":[{"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)$"},{"type":"null"}]},"style":{"default":"","type":"string","maxLength":300}}},"music":{"type":"object","properties":{"score":{"type":"string","minLength":1,"maxLength":600},"stinger":{"default":"","type":"string","maxLength":400},"opening":{"default":"","type":"string","maxLength":600}},"required":["score"]},"sfx":{"type":"object","properties":{"tags":{"default":[],"maxItems":40,"type":"array","items":{"type":"string","minLength":1,"maxLength":40}},"signature":{"default":[],"maxItems":20,"type":"array","items":{"type":"string","minLength":1,"maxLength":200}},"cutWhoosh":{"default":false,"type":"boolean"}}},"ideas":{"default":[],"maxItems":12,"type":"array","items":{"type":"object","properties":{"ar":{"type":"string","minLength":1},"en":{"type":"string","minLength":1}},"required":["ar","en"]}},"cast":{"default":[],"maxItems":16,"type":"array","items":{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":40,"pattern":"^[a-z0-9-]+$"},"name":{"type":"object","properties":{"ar":{"type":"string","minLength":1},"en":{"type":"string","minLength":1}},"required":["ar","en"]},"appearance":{"type":"string","minLength":1,"maxLength":600,"description":"English description the image model draws (hair, outfit, colours, build)"},"personality":{"default":"","type":"string","maxLength":300},"gender":{"type":"string","enum":["male","female"]},"age":{"type":"string","enum":["child","teen","adult","elder"]},"voiceId":{"default":null,"description":"Default voice (Cartoon category)","anyOf":[{"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)$"},{"type":"null"}]},"voiceFx":{"default":"none","type":"string","enum":["none","chibi","giant","robot","alien","radio","echo","monster"]},"imageKey":{"default":null,"description":"Reference picture uploaded by an admin (public bucket, cartoon/…)","anyOf":[{"type":"string","maxLength":400},{"type":"null"}]}},"required":["id","name","appearance","gender","age"]}},"tier":{"default":null,"description":"Preferred video tier slug","anyOf":[{"type":"string","maxLength":100},{"type":"null"}]},"occasion":{"default":null,"description":"A Birthday Hero adventure (docs/BIRTHDAY_HERO.md): offered only on that page, never in the studio picker","anyOf":[{"type":"string","enum":["birthday"]},{"type":"null"}]},"enabled":{"default":true,"type":"boolean"},"order":{"default":100,"type":"integer","minimum":0,"maximum":10000}},"required":["kind","name","tagline","colors","look","formula","music","sfx"]},"coverUrl":{"type":["string","null"]},"sampleUrl":{"type":["string","null"]},"loopUrl":{"type":["string","null"]},"castImages":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":["string","null"]}},"updatedAt":{"type":"string"}},"required":["id","slug","data","coverUrl","sampleUrl","loopUrl","castImages","updatedAt"]},"example":{"id":"01990000-0000-7000-8000-000000000001","slug":"example","data":{"kind":"series","planet":null,"name":{"ar":"مثال","en":"example"},"tagline":{"ar":"مثال","en":"example"},"colors":{"from":"example","to":"example","accent":"example"},"emoji":"🎬","jingle":"anime","coverKey":null,"sampleKey":null,"loopKey":null,"look":"example","characterRules":"","camera":"","formula":"example","dialect":"ar","narrator":{"enabled":false,"voiceId":null,"style":""},"music":{"score":"example","stinger":"","opening":""},"sfx":{"tags":[],"signature":[],"cutWhoosh":false},"ideas":[],"cast":[],"tier":null,"occasion":null,"enabled":true,"order":100},"coverUrl":"http://localhost:4000/example","sampleUrl":"http://localhost:4000/example","loopUrl":"http://localhost:4000/example","castImages":{},"updatedAt":"2026-09-19T12:00:00.000Z"}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/cartoon/themes","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/cartoon/themes","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/cartoon/themes","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/cartoon/themes","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/cartoon/themes","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/cartoon/themes","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/cartoon/themes","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/cartoon/themes","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/cartoon/themes","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/cartoon/themes","traceId":"request-id"}}}}}}},"/v1/admin/cartoon/themes/{id}":{"put":{"operationId":"adminUpdateCartoonTheme","tags":["Admin"],"summary":"Change a series or style. Audit-logged","description":"Requires admin permission content.write. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"X-CSRF-Token","in":"header","required":false,"description":"Required for cookie-authenticated mutations; returned by sign-in/sign-up.","schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"slug":{"type":"string","minLength":1,"maxLength":80,"pattern":"^[a-z0-9-]+$"},"data":{"type":"object","properties":{"kind":{"type":"string","enum":["series","style"]},"planet":{"default":null,"anyOf":[{"type":"string","enum":["action","adventure","sports","comedy","zumurruda","science","bonbon","heroes"]},{"type":"null"}]},"name":{"type":"object","properties":{"ar":{"type":"string","minLength":1},"en":{"type":"string","minLength":1}},"required":["ar","en"]},"tagline":{"type":"object","properties":{"ar":{"type":"string","minLength":1},"en":{"type":"string","minLength":1}},"required":["ar","en"]},"colors":{"type":"object","properties":{"from":{"type":"string","pattern":"^#[0-9a-fA-F]{6}$"},"to":{"type":"string","pattern":"^#[0-9a-fA-F]{6}$"},"accent":{"type":"string","pattern":"^#[0-9a-fA-F]{6}$"}},"required":["from","to","accent"]},"emoji":{"default":"🎬","type":"string","maxLength":8},"jingle":{"default":"anime","type":"string","enum":["mystery","heroic","sports","mecha","tearjerker","pirate","power","creature","slapstick","anime","retro","family","kawaii","storybook","kids","adventure"]},"coverKey":{"default":null,"anyOf":[{"type":"string","maxLength":400},{"type":"null"}]},"sampleKey":{"default":null,"description":"A short sample clip with sound (public bucket)","anyOf":[{"type":"string","maxLength":400},{"type":"null"}]},"loopKey":{"default":null,"description":"A short silent looping clip shown instead of the emoji (always played muted)","anyOf":[{"type":"string","maxLength":400},{"type":"null"}]},"look":{"type":"string","minLength":1,"maxLength":1500,"description":"English visual style for every image and clip"},"characterRules":{"default":"","type":"string","maxLength":800},"camera":{"default":"","type":"string","maxLength":800},"formula":{"type":"string","minLength":1,"maxLength":2000,"description":"English story formula the screenplay follows beat by beat"},"dialect":{"default":"ar","description":"Default dialect (ar = Fusha, the classic dub)","type":"string","minLength":2,"maxLength":20},"narrator":{"default":{"enabled":false,"voiceId":null,"style":""},"type":"object","properties":{"enabled":{"default":false,"type":"boolean"},"voiceId":{"default":null,"anyOf":[{"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)$"},{"type":"null"}]},"style":{"default":"","type":"string","maxLength":300}}},"music":{"type":"object","properties":{"score":{"type":"string","minLength":1,"maxLength":600},"stinger":{"default":"","type":"string","maxLength":400},"opening":{"default":"","type":"string","maxLength":600}},"required":["score"]},"sfx":{"type":"object","properties":{"tags":{"default":[],"maxItems":40,"type":"array","items":{"type":"string","minLength":1,"maxLength":40}},"signature":{"default":[],"maxItems":20,"type":"array","items":{"type":"string","minLength":1,"maxLength":200}},"cutWhoosh":{"default":false,"type":"boolean"}}},"ideas":{"default":[],"maxItems":12,"type":"array","items":{"type":"object","properties":{"ar":{"type":"string","minLength":1},"en":{"type":"string","minLength":1}},"required":["ar","en"]}},"cast":{"default":[],"maxItems":16,"type":"array","items":{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":40,"pattern":"^[a-z0-9-]+$"},"name":{"type":"object","properties":{"ar":{"type":"string","minLength":1},"en":{"type":"string","minLength":1}},"required":["ar","en"]},"appearance":{"type":"string","minLength":1,"maxLength":600,"description":"English description the image model draws (hair, outfit, colours, build)"},"personality":{"default":"","type":"string","maxLength":300},"gender":{"type":"string","enum":["male","female"]},"age":{"type":"string","enum":["child","teen","adult","elder"]},"voiceId":{"default":null,"description":"Default voice (Cartoon category)","anyOf":[{"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)$"},{"type":"null"}]},"voiceFx":{"default":"none","type":"string","enum":["none","chibi","giant","robot","alien","radio","echo","monster"]},"imageKey":{"default":null,"description":"Reference picture uploaded by an admin (public bucket, cartoon/…)","anyOf":[{"type":"string","maxLength":400},{"type":"null"}]}},"required":["id","name","appearance","gender","age"]}},"tier":{"default":null,"description":"Preferred video tier slug","anyOf":[{"type":"string","maxLength":100},{"type":"null"}]},"occasion":{"default":null,"description":"A Birthday Hero adventure (docs/BIRTHDAY_HERO.md): offered only on that page, never in the studio picker","anyOf":[{"type":"string","enum":["birthday"]},{"type":"null"}]},"enabled":{"default":true,"type":"boolean"},"order":{"default":100,"type":"integer","minimum":0,"maximum":10000}},"required":["kind","name","tagline","colors","look","formula","music","sfx"]}},"required":["slug","data"]},"example":{"slug":"example","data":{"kind":"series","planet":null,"name":{"ar":"مثال","en":"example"},"tagline":{"ar":"مثال","en":"example"},"colors":{"from":"example","to":"example","accent":"example"},"emoji":"🎬","jingle":"anime","coverKey":null,"sampleKey":null,"loopKey":null,"look":"example","characterRules":"","camera":"","formula":"example","dialect":"ar","narrator":{"enabled":false,"voiceId":null,"style":""},"music":{"score":"example","stinger":"","opening":""},"sfx":{"tags":[],"signature":[],"cutWhoosh":false},"ideas":[],"cast":[],"tier":null,"occasion":null,"enabled":true,"order":100}}}}},"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","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)$"},"slug":{"type":"string"},"data":{"type":"object","properties":{"kind":{"type":"string","enum":["series","style"]},"planet":{"default":null,"anyOf":[{"type":"string","enum":["action","adventure","sports","comedy","zumurruda","science","bonbon","heroes"]},{"type":"null"}]},"name":{"type":"object","properties":{"ar":{"type":"string","minLength":1},"en":{"type":"string","minLength":1}},"required":["ar","en"]},"tagline":{"type":"object","properties":{"ar":{"type":"string","minLength":1},"en":{"type":"string","minLength":1}},"required":["ar","en"]},"colors":{"type":"object","properties":{"from":{"type":"string","pattern":"^#[0-9a-fA-F]{6}$"},"to":{"type":"string","pattern":"^#[0-9a-fA-F]{6}$"},"accent":{"type":"string","pattern":"^#[0-9a-fA-F]{6}$"}},"required":["from","to","accent"]},"emoji":{"default":"🎬","type":"string","maxLength":8},"jingle":{"default":"anime","type":"string","enum":["mystery","heroic","sports","mecha","tearjerker","pirate","power","creature","slapstick","anime","retro","family","kawaii","storybook","kids","adventure"]},"coverKey":{"default":null,"anyOf":[{"type":"string","maxLength":400},{"type":"null"}]},"sampleKey":{"default":null,"description":"A short sample clip with sound (public bucket)","anyOf":[{"type":"string","maxLength":400},{"type":"null"}]},"loopKey":{"default":null,"description":"A short silent looping clip shown instead of the emoji (always played muted)","anyOf":[{"type":"string","maxLength":400},{"type":"null"}]},"look":{"type":"string","minLength":1,"maxLength":1500,"description":"English visual style for every image and clip"},"characterRules":{"default":"","type":"string","maxLength":800},"camera":{"default":"","type":"string","maxLength":800},"formula":{"type":"string","minLength":1,"maxLength":2000,"description":"English story formula the screenplay follows beat by beat"},"dialect":{"default":"ar","description":"Default dialect (ar = Fusha, the classic dub)","type":"string","minLength":2,"maxLength":20},"narrator":{"default":{"enabled":false,"voiceId":null,"style":""},"type":"object","properties":{"enabled":{"default":false,"type":"boolean"},"voiceId":{"default":null,"anyOf":[{"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)$"},{"type":"null"}]},"style":{"default":"","type":"string","maxLength":300}}},"music":{"type":"object","properties":{"score":{"type":"string","minLength":1,"maxLength":600},"stinger":{"default":"","type":"string","maxLength":400},"opening":{"default":"","type":"string","maxLength":600}},"required":["score"]},"sfx":{"type":"object","properties":{"tags":{"default":[],"maxItems":40,"type":"array","items":{"type":"string","minLength":1,"maxLength":40}},"signature":{"default":[],"maxItems":20,"type":"array","items":{"type":"string","minLength":1,"maxLength":200}},"cutWhoosh":{"default":false,"type":"boolean"}}},"ideas":{"default":[],"maxItems":12,"type":"array","items":{"type":"object","properties":{"ar":{"type":"string","minLength":1},"en":{"type":"string","minLength":1}},"required":["ar","en"]}},"cast":{"default":[],"maxItems":16,"type":"array","items":{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":40,"pattern":"^[a-z0-9-]+$"},"name":{"type":"object","properties":{"ar":{"type":"string","minLength":1},"en":{"type":"string","minLength":1}},"required":["ar","en"]},"appearance":{"type":"string","minLength":1,"maxLength":600,"description":"English description the image model draws (hair, outfit, colours, build)"},"personality":{"default":"","type":"string","maxLength":300},"gender":{"type":"string","enum":["male","female"]},"age":{"type":"string","enum":["child","teen","adult","elder"]},"voiceId":{"default":null,"description":"Default voice (Cartoon category)","anyOf":[{"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)$"},{"type":"null"}]},"voiceFx":{"default":"none","type":"string","enum":["none","chibi","giant","robot","alien","radio","echo","monster"]},"imageKey":{"default":null,"description":"Reference picture uploaded by an admin (public bucket, cartoon/…)","anyOf":[{"type":"string","maxLength":400},{"type":"null"}]}},"required":["id","name","appearance","gender","age"]}},"tier":{"default":null,"description":"Preferred video tier slug","anyOf":[{"type":"string","maxLength":100},{"type":"null"}]},"occasion":{"default":null,"description":"A Birthday Hero adventure (docs/BIRTHDAY_HERO.md): offered only on that page, never in the studio picker","anyOf":[{"type":"string","enum":["birthday"]},{"type":"null"}]},"enabled":{"default":true,"type":"boolean"},"order":{"default":100,"type":"integer","minimum":0,"maximum":10000}},"required":["kind","name","tagline","colors","look","formula","music","sfx"]},"coverUrl":{"type":["string","null"]},"sampleUrl":{"type":["string","null"]},"loopUrl":{"type":["string","null"]},"castImages":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":["string","null"]}},"updatedAt":{"type":"string"}},"required":["id","slug","data","coverUrl","sampleUrl","loopUrl","castImages","updatedAt"]},"example":{"id":"01990000-0000-7000-8000-000000000001","slug":"example","data":{"kind":"series","planet":null,"name":{"ar":"مثال","en":"example"},"tagline":{"ar":"مثال","en":"example"},"colors":{"from":"example","to":"example","accent":"example"},"emoji":"🎬","jingle":"anime","coverKey":null,"sampleKey":null,"loopKey":null,"look":"example","characterRules":"","camera":"","formula":"example","dialect":"ar","narrator":{"enabled":false,"voiceId":null,"style":""},"music":{"score":"example","stinger":"","opening":""},"sfx":{"tags":[],"signature":[],"cutWhoosh":false},"ideas":[],"cast":[],"tier":null,"occasion":null,"enabled":true,"order":100},"coverUrl":"http://localhost:4000/example","sampleUrl":"http://localhost:4000/example","loopUrl":"http://localhost:4000/example","castImages":{},"updatedAt":"2026-09-19T12:00:00.000Z"}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/cartoon/themes/{id}","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/cartoon/themes/{id}","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/cartoon/themes/{id}","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/cartoon/themes/{id}","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/cartoon/themes/{id}","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/cartoon/themes/{id}","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/cartoon/themes/{id}","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/cartoon/themes/{id}","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/cartoon/themes/{id}","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/cartoon/themes/{id}","traceId":"request-id"}}}}}},"delete":{"operationId":"adminDeleteCartoonTheme","tags":["Admin"],"summary":"Remove a series or style (episodes made with it keep working). Audit-logged","description":"Requires admin permission content.write. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"X-CSRF-Token","in":"header","required":false,"description":"Required for cookie-authenticated mutations; returned by sign-in/sign-up.","schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"ok":{"type":"boolean"}},"required":["ok"]},"example":{"ok":true}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/cartoon/themes/{id}","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/cartoon/themes/{id}","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/cartoon/themes/{id}","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/cartoon/themes/{id}","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/cartoon/themes/{id}","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/cartoon/themes/{id}","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/cartoon/themes/{id}","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/cartoon/themes/{id}","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/cartoon/themes/{id}","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/cartoon/themes/{id}","traceId":"request-id"}}}}}}},"/v1/admin/cartoon/themes/{id}/media":{"post":{"operationId":"adminUploadCartoonThemeMedia","tags":["Admin"],"summary":"Upload the cover picture (JPEG/PNG/WebP), the sample clip (MP4 with sound, at most 30 MB), the silent loop shown instead of the emoji (MP4, at most 15 MB, always played muted) or a cast member reference picture","description":"Requires admin permission content.write. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"X-CSRF-Token","in":"header","required":false,"description":"Required for cookie-authenticated mutations; returned by sign-in/sign-up.","schema":{"type":"string"}},{"name":"kind","in":"query","required":true,"schema":{"type":"string","enum":["cover","sample","loop","cast"]}},{"name":"castId","in":"query","required":false,"schema":{"type":"string","maxLength":40}}],"security":[{"session":[]},{"apiKey":[]}],"requestBody":{"required":true,"content":{"application/octet-stream":{"schema":{"type":"string","format":"binary"}}}},"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","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)$"},"slug":{"type":"string"},"data":{"type":"object","properties":{"kind":{"type":"string","enum":["series","style"]},"planet":{"default":null,"anyOf":[{"type":"string","enum":["action","adventure","sports","comedy","zumurruda","science","bonbon","heroes"]},{"type":"null"}]},"name":{"type":"object","properties":{"ar":{"type":"string","minLength":1},"en":{"type":"string","minLength":1}},"required":["ar","en"]},"tagline":{"type":"object","properties":{"ar":{"type":"string","minLength":1},"en":{"type":"string","minLength":1}},"required":["ar","en"]},"colors":{"type":"object","properties":{"from":{"type":"string","pattern":"^#[0-9a-fA-F]{6}$"},"to":{"type":"string","pattern":"^#[0-9a-fA-F]{6}$"},"accent":{"type":"string","pattern":"^#[0-9a-fA-F]{6}$"}},"required":["from","to","accent"]},"emoji":{"default":"🎬","type":"string","maxLength":8},"jingle":{"default":"anime","type":"string","enum":["mystery","heroic","sports","mecha","tearjerker","pirate","power","creature","slapstick","anime","retro","family","kawaii","storybook","kids","adventure"]},"coverKey":{"default":null,"anyOf":[{"type":"string","maxLength":400},{"type":"null"}]},"sampleKey":{"default":null,"description":"A short sample clip with sound (public bucket)","anyOf":[{"type":"string","maxLength":400},{"type":"null"}]},"loopKey":{"default":null,"description":"A short silent looping clip shown instead of the emoji (always played muted)","anyOf":[{"type":"string","maxLength":400},{"type":"null"}]},"look":{"type":"string","minLength":1,"maxLength":1500,"description":"English visual style for every image and clip"},"characterRules":{"default":"","type":"string","maxLength":800},"camera":{"default":"","type":"string","maxLength":800},"formula":{"type":"string","minLength":1,"maxLength":2000,"description":"English story formula the screenplay follows beat by beat"},"dialect":{"default":"ar","description":"Default dialect (ar = Fusha, the classic dub)","type":"string","minLength":2,"maxLength":20},"narrator":{"default":{"enabled":false,"voiceId":null,"style":""},"type":"object","properties":{"enabled":{"default":false,"type":"boolean"},"voiceId":{"default":null,"anyOf":[{"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)$"},{"type":"null"}]},"style":{"default":"","type":"string","maxLength":300}}},"music":{"type":"object","properties":{"score":{"type":"string","minLength":1,"maxLength":600},"stinger":{"default":"","type":"string","maxLength":400},"opening":{"default":"","type":"string","maxLength":600}},"required":["score"]},"sfx":{"type":"object","properties":{"tags":{"default":[],"maxItems":40,"type":"array","items":{"type":"string","minLength":1,"maxLength":40}},"signature":{"default":[],"maxItems":20,"type":"array","items":{"type":"string","minLength":1,"maxLength":200}},"cutWhoosh":{"default":false,"type":"boolean"}}},"ideas":{"default":[],"maxItems":12,"type":"array","items":{"type":"object","properties":{"ar":{"type":"string","minLength":1},"en":{"type":"string","minLength":1}},"required":["ar","en"]}},"cast":{"default":[],"maxItems":16,"type":"array","items":{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":40,"pattern":"^[a-z0-9-]+$"},"name":{"type":"object","properties":{"ar":{"type":"string","minLength":1},"en":{"type":"string","minLength":1}},"required":["ar","en"]},"appearance":{"type":"string","minLength":1,"maxLength":600,"description":"English description the image model draws (hair, outfit, colours, build)"},"personality":{"default":"","type":"string","maxLength":300},"gender":{"type":"string","enum":["male","female"]},"age":{"type":"string","enum":["child","teen","adult","elder"]},"voiceId":{"default":null,"description":"Default voice (Cartoon category)","anyOf":[{"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)$"},{"type":"null"}]},"voiceFx":{"default":"none","type":"string","enum":["none","chibi","giant","robot","alien","radio","echo","monster"]},"imageKey":{"default":null,"description":"Reference picture uploaded by an admin (public bucket, cartoon/…)","anyOf":[{"type":"string","maxLength":400},{"type":"null"}]}},"required":["id","name","appearance","gender","age"]}},"tier":{"default":null,"description":"Preferred video tier slug","anyOf":[{"type":"string","maxLength":100},{"type":"null"}]},"occasion":{"default":null,"description":"A Birthday Hero adventure (docs/BIRTHDAY_HERO.md): offered only on that page, never in the studio picker","anyOf":[{"type":"string","enum":["birthday"]},{"type":"null"}]},"enabled":{"default":true,"type":"boolean"},"order":{"default":100,"type":"integer","minimum":0,"maximum":10000}},"required":["kind","name","tagline","colors","look","formula","music","sfx"]},"coverUrl":{"type":["string","null"]},"sampleUrl":{"type":["string","null"]},"loopUrl":{"type":["string","null"]},"castImages":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":["string","null"]}},"updatedAt":{"type":"string"}},"required":["id","slug","data","coverUrl","sampleUrl","loopUrl","castImages","updatedAt"]},"example":{"id":"01990000-0000-7000-8000-000000000001","slug":"example","data":{"kind":"series","planet":null,"name":{"ar":"مثال","en":"example"},"tagline":{"ar":"مثال","en":"example"},"colors":{"from":"example","to":"example","accent":"example"},"emoji":"🎬","jingle":"anime","coverKey":null,"sampleKey":null,"loopKey":null,"look":"example","characterRules":"","camera":"","formula":"example","dialect":"ar","narrator":{"enabled":false,"voiceId":null,"style":""},"music":{"score":"example","stinger":"","opening":""},"sfx":{"tags":[],"signature":[],"cutWhoosh":false},"ideas":[],"cast":[],"tier":null,"occasion":null,"enabled":true,"order":100},"coverUrl":"http://localhost:4000/example","sampleUrl":"http://localhost:4000/example","loopUrl":"http://localhost:4000/example","castImages":{},"updatedAt":"2026-09-19T12:00:00.000Z"}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/cartoon/themes/{id}/media","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/cartoon/themes/{id}/media","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/cartoon/themes/{id}/media","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/cartoon/themes/{id}/media","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/cartoon/themes/{id}/media","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/cartoon/themes/{id}/media","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/cartoon/themes/{id}/media","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/cartoon/themes/{id}/media","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/cartoon/themes/{id}/media","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/cartoon/themes/{id}/media","traceId":"request-id"}}}}}},"delete":{"operationId":"adminDeleteCartoonThemeMedia","tags":["Admin"],"summary":"Remove the cover, sample, loop or a cast member picture (the stored file is kept). Audit-logged","description":"Requires admin permission content.write. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"X-CSRF-Token","in":"header","required":false,"description":"Required for cookie-authenticated mutations; returned by sign-in/sign-up.","schema":{"type":"string"}},{"name":"kind","in":"query","required":true,"schema":{"type":"string","enum":["cover","sample","loop","cast"]}},{"name":"castId","in":"query","required":false,"schema":{"type":"string","maxLength":40}}],"security":[{"session":[]},{"apiKey":[]}],"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","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)$"},"slug":{"type":"string"},"data":{"type":"object","properties":{"kind":{"type":"string","enum":["series","style"]},"planet":{"default":null,"anyOf":[{"type":"string","enum":["action","adventure","sports","comedy","zumurruda","science","bonbon","heroes"]},{"type":"null"}]},"name":{"type":"object","properties":{"ar":{"type":"string","minLength":1},"en":{"type":"string","minLength":1}},"required":["ar","en"]},"tagline":{"type":"object","properties":{"ar":{"type":"string","minLength":1},"en":{"type":"string","minLength":1}},"required":["ar","en"]},"colors":{"type":"object","properties":{"from":{"type":"string","pattern":"^#[0-9a-fA-F]{6}$"},"to":{"type":"string","pattern":"^#[0-9a-fA-F]{6}$"},"accent":{"type":"string","pattern":"^#[0-9a-fA-F]{6}$"}},"required":["from","to","accent"]},"emoji":{"default":"🎬","type":"string","maxLength":8},"jingle":{"default":"anime","type":"string","enum":["mystery","heroic","sports","mecha","tearjerker","pirate","power","creature","slapstick","anime","retro","family","kawaii","storybook","kids","adventure"]},"coverKey":{"default":null,"anyOf":[{"type":"string","maxLength":400},{"type":"null"}]},"sampleKey":{"default":null,"description":"A short sample clip with sound (public bucket)","anyOf":[{"type":"string","maxLength":400},{"type":"null"}]},"loopKey":{"default":null,"description":"A short silent looping clip shown instead of the emoji (always played muted)","anyOf":[{"type":"string","maxLength":400},{"type":"null"}]},"look":{"type":"string","minLength":1,"maxLength":1500,"description":"English visual style for every image and clip"},"characterRules":{"default":"","type":"string","maxLength":800},"camera":{"default":"","type":"string","maxLength":800},"formula":{"type":"string","minLength":1,"maxLength":2000,"description":"English story formula the screenplay follows beat by beat"},"dialect":{"default":"ar","description":"Default dialect (ar = Fusha, the classic dub)","type":"string","minLength":2,"maxLength":20},"narrator":{"default":{"enabled":false,"voiceId":null,"style":""},"type":"object","properties":{"enabled":{"default":false,"type":"boolean"},"voiceId":{"default":null,"anyOf":[{"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)$"},{"type":"null"}]},"style":{"default":"","type":"string","maxLength":300}}},"music":{"type":"object","properties":{"score":{"type":"string","minLength":1,"maxLength":600},"stinger":{"default":"","type":"string","maxLength":400},"opening":{"default":"","type":"string","maxLength":600}},"required":["score"]},"sfx":{"type":"object","properties":{"tags":{"default":[],"maxItems":40,"type":"array","items":{"type":"string","minLength":1,"maxLength":40}},"signature":{"default":[],"maxItems":20,"type":"array","items":{"type":"string","minLength":1,"maxLength":200}},"cutWhoosh":{"default":false,"type":"boolean"}}},"ideas":{"default":[],"maxItems":12,"type":"array","items":{"type":"object","properties":{"ar":{"type":"string","minLength":1},"en":{"type":"string","minLength":1}},"required":["ar","en"]}},"cast":{"default":[],"maxItems":16,"type":"array","items":{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":40,"pattern":"^[a-z0-9-]+$"},"name":{"type":"object","properties":{"ar":{"type":"string","minLength":1},"en":{"type":"string","minLength":1}},"required":["ar","en"]},"appearance":{"type":"string","minLength":1,"maxLength":600,"description":"English description the image model draws (hair, outfit, colours, build)"},"personality":{"default":"","type":"string","maxLength":300},"gender":{"type":"string","enum":["male","female"]},"age":{"type":"string","enum":["child","teen","adult","elder"]},"voiceId":{"default":null,"description":"Default voice (Cartoon category)","anyOf":[{"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)$"},{"type":"null"}]},"voiceFx":{"default":"none","type":"string","enum":["none","chibi","giant","robot","alien","radio","echo","monster"]},"imageKey":{"default":null,"description":"Reference picture uploaded by an admin (public bucket, cartoon/…)","anyOf":[{"type":"string","maxLength":400},{"type":"null"}]}},"required":["id","name","appearance","gender","age"]}},"tier":{"default":null,"description":"Preferred video tier slug","anyOf":[{"type":"string","maxLength":100},{"type":"null"}]},"occasion":{"default":null,"description":"A Birthday Hero adventure (docs/BIRTHDAY_HERO.md): offered only on that page, never in the studio picker","anyOf":[{"type":"string","enum":["birthday"]},{"type":"null"}]},"enabled":{"default":true,"type":"boolean"},"order":{"default":100,"type":"integer","minimum":0,"maximum":10000}},"required":["kind","name","tagline","colors","look","formula","music","sfx"]},"coverUrl":{"type":["string","null"]},"sampleUrl":{"type":["string","null"]},"loopUrl":{"type":["string","null"]},"castImages":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":["string","null"]}},"updatedAt":{"type":"string"}},"required":["id","slug","data","coverUrl","sampleUrl","loopUrl","castImages","updatedAt"]},"example":{"id":"01990000-0000-7000-8000-000000000001","slug":"example","data":{"kind":"series","planet":null,"name":{"ar":"مثال","en":"example"},"tagline":{"ar":"مثال","en":"example"},"colors":{"from":"example","to":"example","accent":"example"},"emoji":"🎬","jingle":"anime","coverKey":null,"sampleKey":null,"loopKey":null,"look":"example","characterRules":"","camera":"","formula":"example","dialect":"ar","narrator":{"enabled":false,"voiceId":null,"style":""},"music":{"score":"example","stinger":"","opening":""},"sfx":{"tags":[],"signature":[],"cutWhoosh":false},"ideas":[],"cast":[],"tier":null,"occasion":null,"enabled":true,"order":100},"coverUrl":"http://localhost:4000/example","sampleUrl":"http://localhost:4000/example","loopUrl":"http://localhost:4000/example","castImages":{},"updatedAt":"2026-09-19T12:00:00.000Z"}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/cartoon/themes/{id}/media","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/cartoon/themes/{id}/media","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/cartoon/themes/{id}/media","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/cartoon/themes/{id}/media","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/cartoon/themes/{id}/media","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/cartoon/themes/{id}/media","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/cartoon/themes/{id}/media","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/cartoon/themes/{id}/media","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/cartoon/themes/{id}/media","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/cartoon/themes/{id}/media","traceId":"request-id"}}}}}}},"/v1/admin/cartoon/sounds":{"get":{"operationId":"adminListSfxSounds","tags":["Admin"],"summary":"The sound library","description":"Requires admin permission content.read. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"q","in":"query","required":false,"schema":{"type":"string","maxLength":200}},{"name":"category","in":"query","required":false,"schema":{"type":"string","enum":["hard","foley","ambience","stinger","transition","music"]}},{"name":"pack","in":"query","required":false,"schema":{"type":"string","maxLength":80}}],"security":[{"session":[]},{"apiKey":[]}],"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"items":{"type":"array","items":{"type":"object","properties":{"name":{"type":"object","properties":{"ar":{"type":"string","minLength":1},"en":{"type":"string","minLength":1}},"required":["ar","en"]},"tags":{"maxItems":40,"type":"array","items":{"type":"string","minLength":1,"maxLength":40}},"category":{"type":"string","enum":["hard","foley","ambience","stinger","transition","music"]},"packs":{"default":[],"description":"Theme slugs this sound belongs to","maxItems":40,"type":"array","items":{"type":"string","minLength":1,"maxLength":80}},"duration":{"default":0,"type":"number","minimum":0},"source":{"type":"string","enum":["upload","generated","synth"]},"key":{"default":null,"anyOf":[{"type":"string","maxLength":400},{"type":"null"}]},"synth":{"default":null,"description":"Built-in recipe (source synth): rendered by ffmpeg, no file","anyOf":[{"type":"string","maxLength":40},{"type":"null"}]},"prompt":{"default":null,"anyOf":[{"type":"string","maxLength":500},{"type":"null"}]},"loop":{"default":false,"type":"boolean"},"enabled":{"default":true,"type":"boolean"},"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)$"},"url":{"type":["string","null"]},"updatedAt":{"type":"string"}},"required":["name","tags","category","source","id","url","updatedAt"]}}},"required":["items"]},"example":{"items":[{"name":{"ar":"مثال","en":"example"},"tags":["example"],"category":"hard","packs":[],"duration":0,"source":"upload","key":null,"synth":null,"prompt":null,"loop":false,"enabled":true,"id":"01990000-0000-7000-8000-000000000001","url":"example","updatedAt":"2026-09-19T12:00:00.000Z"}]}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/cartoon/sounds","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/cartoon/sounds","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/cartoon/sounds","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/cartoon/sounds","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/cartoon/sounds","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/cartoon/sounds","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/cartoon/sounds","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/cartoon/sounds","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/cartoon/sounds","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/cartoon/sounds","traceId":"request-id"}}}}}}},"/v1/admin/cartoon/sounds/upload":{"post":{"operationId":"adminUploadSfxSound","tags":["Admin"],"summary":"Add a sound from a WAV, MP3 or OGG file (at most 20 MB): trimmed, levelled and stored","description":"Requires admin permission content.write. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"X-CSRF-Token","in":"header","required":false,"description":"Required for cookie-authenticated mutations; returned by sign-in/sign-up.","schema":{"type":"string"}},{"name":"category","in":"query","required":true,"schema":{"type":"string","enum":["hard","foley","ambience","stinger","transition","music"]}},{"name":"nameAr","in":"query","required":true,"schema":{"type":"string","minLength":1,"maxLength":120}},{"name":"nameEn","in":"query","required":true,"schema":{"type":"string","minLength":1,"maxLength":120}},{"name":"tags","in":"query","required":false,"schema":{"default":"","description":"Comma separated","type":"string","maxLength":800}},{"name":"packs","in":"query","required":false,"schema":{"default":"","type":"string","maxLength":800}},{"name":"loop","in":"query","required":false,"schema":{"default":"false","type":"string","enum":["true","false"]}}],"security":[{"session":[]},{"apiKey":[]}],"requestBody":{"required":true,"content":{"application/octet-stream":{"schema":{"type":"string","format":"binary"}}}},"responses":{"201":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"name":{"type":"object","properties":{"ar":{"type":"string","minLength":1},"en":{"type":"string","minLength":1}},"required":["ar","en"]},"tags":{"maxItems":40,"type":"array","items":{"type":"string","minLength":1,"maxLength":40}},"category":{"type":"string","enum":["hard","foley","ambience","stinger","transition","music"]},"packs":{"default":[],"description":"Theme slugs this sound belongs to","maxItems":40,"type":"array","items":{"type":"string","minLength":1,"maxLength":80}},"duration":{"default":0,"type":"number","minimum":0},"source":{"type":"string","enum":["upload","generated","synth"]},"key":{"default":null,"anyOf":[{"type":"string","maxLength":400},{"type":"null"}]},"synth":{"default":null,"description":"Built-in recipe (source synth): rendered by ffmpeg, no file","anyOf":[{"type":"string","maxLength":40},{"type":"null"}]},"prompt":{"default":null,"anyOf":[{"type":"string","maxLength":500},{"type":"null"}]},"loop":{"default":false,"type":"boolean"},"enabled":{"default":true,"type":"boolean"},"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)$"},"url":{"type":["string","null"]},"updatedAt":{"type":"string"}},"required":["name","tags","category","source","id","url","updatedAt"]},"example":{"name":{"ar":"مثال","en":"example"},"tags":["example"],"category":"hard","packs":[],"duration":0,"source":"upload","key":null,"synth":null,"prompt":null,"loop":false,"enabled":true,"id":"01990000-0000-7000-8000-000000000001","url":"example","updatedAt":"2026-09-19T12:00:00.000Z"}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/cartoon/sounds/upload","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/cartoon/sounds/upload","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/cartoon/sounds/upload","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/cartoon/sounds/upload","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/cartoon/sounds/upload","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/cartoon/sounds/upload","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/cartoon/sounds/upload","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/cartoon/sounds/upload","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/cartoon/sounds/upload","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/cartoon/sounds/upload","traceId":"request-id"}}}}}}},"/v1/admin/cartoon/sounds/generate":{"post":{"operationId":"adminGenerateSfxSound","tags":["Admin"],"summary":"Generate a sound with the sound-effects model and add it to the library","description":"Requires admin permission content.write. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"X-CSRF-Token","in":"header","required":false,"description":"Required for cookie-authenticated mutations; returned by sign-in/sign-up.","schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"prompt":{"type":"string","minLength":3,"maxLength":400},"duration":{"default":2,"type":"number","minimum":0.5,"maximum":22},"category":{"type":"string","enum":["hard","foley","ambience","stinger","transition","music"]},"name":{"type":"object","properties":{"ar":{"type":"string","minLength":1},"en":{"type":"string","minLength":1}},"required":["ar","en"]},"tags":{"default":[],"maxItems":40,"type":"array","items":{"type":"string","minLength":1,"maxLength":40}},"packs":{"default":[],"maxItems":40,"type":"array","items":{"type":"string"}}},"required":["prompt","category","name"]},"example":{"prompt":"مرحباً بك في فوكلا.","duration":2,"category":"hard","name":{"ar":"مثال","en":"example"},"tags":[],"packs":[]}}}},"responses":{"201":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"name":{"type":"object","properties":{"ar":{"type":"string","minLength":1},"en":{"type":"string","minLength":1}},"required":["ar","en"]},"tags":{"maxItems":40,"type":"array","items":{"type":"string","minLength":1,"maxLength":40}},"category":{"type":"string","enum":["hard","foley","ambience","stinger","transition","music"]},"packs":{"default":[],"description":"Theme slugs this sound belongs to","maxItems":40,"type":"array","items":{"type":"string","minLength":1,"maxLength":80}},"duration":{"default":0,"type":"number","minimum":0},"source":{"type":"string","enum":["upload","generated","synth"]},"key":{"default":null,"anyOf":[{"type":"string","maxLength":400},{"type":"null"}]},"synth":{"default":null,"description":"Built-in recipe (source synth): rendered by ffmpeg, no file","anyOf":[{"type":"string","maxLength":40},{"type":"null"}]},"prompt":{"default":null,"anyOf":[{"type":"string","maxLength":500},{"type":"null"}]},"loop":{"default":false,"type":"boolean"},"enabled":{"default":true,"type":"boolean"},"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)$"},"url":{"type":["string","null"]},"updatedAt":{"type":"string"}},"required":["name","tags","category","source","id","url","updatedAt"]},"example":{"name":{"ar":"مثال","en":"example"},"tags":["example"],"category":"hard","packs":[],"duration":0,"source":"upload","key":null,"synth":null,"prompt":null,"loop":false,"enabled":true,"id":"01990000-0000-7000-8000-000000000001","url":"example","updatedAt":"2026-09-19T12:00:00.000Z"}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/cartoon/sounds/generate","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/cartoon/sounds/generate","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/cartoon/sounds/generate","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/cartoon/sounds/generate","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/cartoon/sounds/generate","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/cartoon/sounds/generate","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/cartoon/sounds/generate","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/cartoon/sounds/generate","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/cartoon/sounds/generate","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/cartoon/sounds/generate","traceId":"request-id"}}}}}}},"/v1/admin/cartoon/sounds/{id}":{"patch":{"operationId":"adminUpdateSfxSound","tags":["Admin"],"summary":"Rename, retag, move to packs, switch on or off","description":"Requires admin permission content.write. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"X-CSRF-Token","in":"header","required":false,"description":"Required for cookie-authenticated mutations; returned by sign-in/sign-up.","schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"name":{"type":"object","properties":{"ar":{"type":"string","minLength":1},"en":{"type":"string","minLength":1}},"required":["ar","en"]},"tags":{"maxItems":40,"type":"array","items":{"type":"string","minLength":1,"maxLength":40}},"category":{"type":"string","enum":["hard","foley","ambience","stinger","transition","music"]},"packs":{"default":[],"description":"Theme slugs this sound belongs to","maxItems":40,"type":"array","items":{"type":"string","minLength":1,"maxLength":80}},"loop":{"default":false,"type":"boolean"},"enabled":{"default":true,"type":"boolean"}}},"example":{"name":{"ar":"مثال","en":"example"},"tags":["example"],"category":"hard","packs":[],"loop":false,"enabled":true}}}},"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"name":{"type":"object","properties":{"ar":{"type":"string","minLength":1},"en":{"type":"string","minLength":1}},"required":["ar","en"]},"tags":{"maxItems":40,"type":"array","items":{"type":"string","minLength":1,"maxLength":40}},"category":{"type":"string","enum":["hard","foley","ambience","stinger","transition","music"]},"packs":{"default":[],"description":"Theme slugs this sound belongs to","maxItems":40,"type":"array","items":{"type":"string","minLength":1,"maxLength":80}},"duration":{"default":0,"type":"number","minimum":0},"source":{"type":"string","enum":["upload","generated","synth"]},"key":{"default":null,"anyOf":[{"type":"string","maxLength":400},{"type":"null"}]},"synth":{"default":null,"description":"Built-in recipe (source synth): rendered by ffmpeg, no file","anyOf":[{"type":"string","maxLength":40},{"type":"null"}]},"prompt":{"default":null,"anyOf":[{"type":"string","maxLength":500},{"type":"null"}]},"loop":{"default":false,"type":"boolean"},"enabled":{"default":true,"type":"boolean"},"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)$"},"url":{"type":["string","null"]},"updatedAt":{"type":"string"}},"required":["name","tags","category","source","id","url","updatedAt"]},"example":{"name":{"ar":"مثال","en":"example"},"tags":["example"],"category":"hard","packs":[],"duration":0,"source":"upload","key":null,"synth":null,"prompt":null,"loop":false,"enabled":true,"id":"01990000-0000-7000-8000-000000000001","url":"example","updatedAt":"2026-09-19T12:00:00.000Z"}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/cartoon/sounds/{id}","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/cartoon/sounds/{id}","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/cartoon/sounds/{id}","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/cartoon/sounds/{id}","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/cartoon/sounds/{id}","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/cartoon/sounds/{id}","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/cartoon/sounds/{id}","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/cartoon/sounds/{id}","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/cartoon/sounds/{id}","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/cartoon/sounds/{id}","traceId":"request-id"}}}}}},"delete":{"operationId":"adminDeleteSfxSound","tags":["Admin"],"summary":"Remove a sound from the library (episodes already mixed keep it)","description":"Requires admin permission content.write. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"X-CSRF-Token","in":"header","required":false,"description":"Required for cookie-authenticated mutations; returned by sign-in/sign-up.","schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"ok":{"type":"boolean"}},"required":["ok"]},"example":{"ok":true}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/cartoon/sounds/{id}","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/cartoon/sounds/{id}","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/cartoon/sounds/{id}","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/cartoon/sounds/{id}","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/cartoon/sounds/{id}","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/cartoon/sounds/{id}","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/cartoon/sounds/{id}","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/cartoon/sounds/{id}","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/cartoon/sounds/{id}","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/cartoon/sounds/{id}","traceId":"request-id"}}}}}}},"/v1/admin/cartoon/pricing":{"get":{"operationId":"adminGetCartoonPricing","tags":["Admin"],"summary":"Cartoon studio extras: credits per character sheet, storyboard still, generated sound, score and sung opening, and free regenerations","description":"Requires admin permission models.read. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false}],"security":[{"session":[]},{"apiKey":[]}],"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"sheetCredits":{"type":"integer","minimum":0,"maximum":100000,"description":"Credits per character sheet a production includes (series cast with an admin picture are free)"},"stillCredits":{"type":"integer","minimum":0,"maximum":100000,"description":"Credits per storyboard still a production includes"},"sfxCredits":{"type":"integer","minimum":0,"maximum":100000,"description":"Credits per sound effect generated for the episode (library sounds are free)"},"scoreCredits":{"type":"integer","minimum":0,"maximum":100000,"description":"Credits for the music score of an episode"},"openingCredits":{"type":"integer","minimum":0,"maximum":100000,"description":"Credits for the sung opening"},"regenerationsPerProject":{"type":"integer","minimum":0,"maximum":1000,"description":"Free sheet and still regenerations a project may ask for before production"},"lipSyncPercent":{"default":60,"description":"Lip sync: talking shots cost this much more than the tier rate (percent of their animated seconds); refunded for a shot that falls back","type":"integer","minimum":0,"maximum":500},"defaults":{"type":"object","properties":{"sheetCredits":{"type":"integer","minimum":0,"maximum":100000,"description":"Credits per character sheet a production includes (series cast with an admin picture are free)"},"stillCredits":{"type":"integer","minimum":0,"maximum":100000,"description":"Credits per storyboard still a production includes"},"sfxCredits":{"type":"integer","minimum":0,"maximum":100000,"description":"Credits per sound effect generated for the episode (library sounds are free)"},"scoreCredits":{"type":"integer","minimum":0,"maximum":100000,"description":"Credits for the music score of an episode"},"openingCredits":{"type":"integer","minimum":0,"maximum":100000,"description":"Credits for the sung opening"},"regenerationsPerProject":{"type":"integer","minimum":0,"maximum":1000,"description":"Free sheet and still regenerations a project may ask for before production"},"lipSyncPercent":{"default":60,"description":"Lip sync: talking shots cost this much more than the tier rate (percent of their animated seconds); refunded for a shot that falls back","type":"integer","minimum":0,"maximum":500}},"required":["sheetCredits","stillCredits","sfxCredits","scoreCredits","openingCredits","regenerationsPerProject"]},"updatedAt":{"type":["string","null"]}},"required":["sheetCredits","stillCredits","sfxCredits","scoreCredits","openingCredits","regenerationsPerProject","defaults","updatedAt"]},"example":{"sheetCredits":0,"stillCredits":0,"sfxCredits":0,"scoreCredits":0,"openingCredits":0,"regenerationsPerProject":0,"lipSyncPercent":60,"defaults":{"sheetCredits":0,"stillCredits":0,"sfxCredits":0,"scoreCredits":0,"openingCredits":0,"regenerationsPerProject":0,"lipSyncPercent":60},"updatedAt":"2026-09-19T12:00:00.000Z"}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/cartoon/pricing","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/cartoon/pricing","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/cartoon/pricing","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/cartoon/pricing","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/cartoon/pricing","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/cartoon/pricing","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/cartoon/pricing","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/cartoon/pricing","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/cartoon/pricing","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/cartoon/pricing","traceId":"request-id"}}}}}},"put":{"operationId":"adminUpdateCartoonPricing","tags":["Admin"],"summary":"Set the Cartoon studio extras. Audit-logged","description":"Requires admin permission models.write. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"X-CSRF-Token","in":"header","required":false,"description":"Required for cookie-authenticated mutations; returned by sign-in/sign-up.","schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"sheetCredits":{"type":"integer","minimum":0,"maximum":100000,"description":"Credits per character sheet a production includes (series cast with an admin picture are free)"},"stillCredits":{"type":"integer","minimum":0,"maximum":100000,"description":"Credits per storyboard still a production includes"},"sfxCredits":{"type":"integer","minimum":0,"maximum":100000,"description":"Credits per sound effect generated for the episode (library sounds are free)"},"scoreCredits":{"type":"integer","minimum":0,"maximum":100000,"description":"Credits for the music score of an episode"},"openingCredits":{"type":"integer","minimum":0,"maximum":100000,"description":"Credits for the sung opening"},"regenerationsPerProject":{"type":"integer","minimum":0,"maximum":1000,"description":"Free sheet and still regenerations a project may ask for before production"},"lipSyncPercent":{"default":60,"description":"Lip sync: talking shots cost this much more than the tier rate (percent of their animated seconds); refunded for a shot that falls back","type":"integer","minimum":0,"maximum":500}},"required":["sheetCredits","stillCredits","sfxCredits","scoreCredits","openingCredits","regenerationsPerProject"]},"example":{"sheetCredits":0,"stillCredits":0,"sfxCredits":0,"scoreCredits":0,"openingCredits":0,"regenerationsPerProject":0,"lipSyncPercent":60}}}},"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"sheetCredits":{"type":"integer","minimum":0,"maximum":100000,"description":"Credits per character sheet a production includes (series cast with an admin picture are free)"},"stillCredits":{"type":"integer","minimum":0,"maximum":100000,"description":"Credits per storyboard still a production includes"},"sfxCredits":{"type":"integer","minimum":0,"maximum":100000,"description":"Credits per sound effect generated for the episode (library sounds are free)"},"scoreCredits":{"type":"integer","minimum":0,"maximum":100000,"description":"Credits for the music score of an episode"},"openingCredits":{"type":"integer","minimum":0,"maximum":100000,"description":"Credits for the sung opening"},"regenerationsPerProject":{"type":"integer","minimum":0,"maximum":1000,"description":"Free sheet and still regenerations a project may ask for before production"},"lipSyncPercent":{"default":60,"description":"Lip sync: talking shots cost this much more than the tier rate (percent of their animated seconds); refunded for a shot that falls back","type":"integer","minimum":0,"maximum":500},"defaults":{"type":"object","properties":{"sheetCredits":{"type":"integer","minimum":0,"maximum":100000,"description":"Credits per character sheet a production includes (series cast with an admin picture are free)"},"stillCredits":{"type":"integer","minimum":0,"maximum":100000,"description":"Credits per storyboard still a production includes"},"sfxCredits":{"type":"integer","minimum":0,"maximum":100000,"description":"Credits per sound effect generated for the episode (library sounds are free)"},"scoreCredits":{"type":"integer","minimum":0,"maximum":100000,"description":"Credits for the music score of an episode"},"openingCredits":{"type":"integer","minimum":0,"maximum":100000,"description":"Credits for the sung opening"},"regenerationsPerProject":{"type":"integer","minimum":0,"maximum":1000,"description":"Free sheet and still regenerations a project may ask for before production"},"lipSyncPercent":{"default":60,"description":"Lip sync: talking shots cost this much more than the tier rate (percent of their animated seconds); refunded for a shot that falls back","type":"integer","minimum":0,"maximum":500}},"required":["sheetCredits","stillCredits","sfxCredits","scoreCredits","openingCredits","regenerationsPerProject"]},"updatedAt":{"type":["string","null"]}},"required":["sheetCredits","stillCredits","sfxCredits","scoreCredits","openingCredits","regenerationsPerProject","defaults","updatedAt"]},"example":{"sheetCredits":0,"stillCredits":0,"sfxCredits":0,"scoreCredits":0,"openingCredits":0,"regenerationsPerProject":0,"lipSyncPercent":60,"defaults":{"sheetCredits":0,"stillCredits":0,"sfxCredits":0,"scoreCredits":0,"openingCredits":0,"regenerationsPerProject":0,"lipSyncPercent":60},"updatedAt":"2026-09-19T12:00:00.000Z"}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/cartoon/pricing","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/cartoon/pricing","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/cartoon/pricing","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/cartoon/pricing","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/cartoon/pricing","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/cartoon/pricing","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/cartoon/pricing","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/cartoon/pricing","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/cartoon/pricing","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/cartoon/pricing","traceId":"request-id"}}}}}}},"/v1/admin/cartoon/lip-sync":{"get":{"operationId":"adminGetCartoonLipSync","tags":["Admin"],"summary":"Cartoon lip sync: talking shots spoken by the video model and re-voiced (docs/CARTOON_DIALOGUE_PIPELINE.md)","description":"Requires admin permission models.read. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false}],"security":[{"session":[]},{"apiKey":[]}],"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"enabled":{"type":"boolean","description":"On for every workspace"},"workspaceIds":{"default":[],"description":"Workspaces it is on for while it is off for everyone (testing)","maxItems":100,"type":"array","items":{"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)$"}},"updatedAt":{"type":["string","null"]}},"required":["enabled","updatedAt"]},"example":{"enabled":true,"workspaceIds":[],"updatedAt":"2026-09-19T12:00:00.000Z"}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/cartoon/lip-sync","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/cartoon/lip-sync","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/cartoon/lip-sync","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/cartoon/lip-sync","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/cartoon/lip-sync","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/cartoon/lip-sync","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/cartoon/lip-sync","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/cartoon/lip-sync","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/cartoon/lip-sync","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/cartoon/lip-sync","traceId":"request-id"}}}}}},"put":{"operationId":"adminUpdateCartoonLipSync","tags":["Admin"],"summary":"Turn Cartoon lip sync on for everyone or for listed workspaces. Audit-logged","description":"Requires admin permission models.write. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"X-CSRF-Token","in":"header","required":false,"description":"Required for cookie-authenticated mutations; returned by sign-in/sign-up.","schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"enabled":{"type":"boolean","description":"On for every workspace"},"workspaceIds":{"default":[],"description":"Workspaces it is on for while it is off for everyone (testing)","maxItems":100,"type":"array","items":{"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)$"}}},"required":["enabled"]},"example":{"enabled":true,"workspaceIds":[]}}}},"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"enabled":{"type":"boolean","description":"On for every workspace"},"workspaceIds":{"default":[],"description":"Workspaces it is on for while it is off for everyone (testing)","maxItems":100,"type":"array","items":{"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)$"}},"updatedAt":{"type":["string","null"]}},"required":["enabled","updatedAt"]},"example":{"enabled":true,"workspaceIds":[],"updatedAt":"2026-09-19T12:00:00.000Z"}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/cartoon/lip-sync","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/cartoon/lip-sync","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/cartoon/lip-sync","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/cartoon/lip-sync","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/cartoon/lip-sync","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/cartoon/lip-sync","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/cartoon/lip-sync","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/cartoon/lip-sync","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/cartoon/lip-sync","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/cartoon/lip-sync","traceId":"request-id"}}}}}}},"/v1/admin/billing/webhooks":{"get":{"operationId":"adminListBillingWebhooks","tags":["Admin"],"summary":"Dodo billing events as processed, with the problems: stuck, failing, needing action in Dodo, and ignored events","description":"Requires admin permission billing.read. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"filter","in":"query","required":false,"schema":{"type":"string","enum":["problems","ignored","all"]}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","minimum":1,"maximum":200}}],"security":[{"session":[]},{"apiKey":[]}],"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"filter":{"type":"string","enum":["problems","ignored","all"]},"summary":{"type":"object","properties":{"stuck":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"failing":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"needsAction":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"problems":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"ignored7d":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"received24h":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"lastReceivedAt":{"type":["string","null"]}},"required":["stuck","failing","needsAction","problems","ignored7d","received24h","lastReceivedAt"]},"items":{"type":"array","items":{"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)$"},"webhookId":{"type":"string"},"type":{"type":"string"},"status":{"anyOf":[{"type":"string","enum":["pending","processed","ignored"]},{"type":"string"}]},"problem":{"anyOf":[{"type":"string","enum":["stuck","failing","needs_action","ignored"]},{"type":"null"}],"description":"stuck: unprocessed after 10 min; failing: the worker failed (error kept); needs_action: act in Dodo (a duplicate subscription it would not cancel, or an activation not applied); ignored: an event for a subscription that is not the workspace's current one"},"error":{"type":["string","null"]},"createdAt":{"type":"string"},"workspaceId":{"type":["string","null"]},"workspaceName":{"type":["string","null"]},"ownerEmail":{"type":["string","null"]},"subscriptionId":{"type":["string","null"]},"paymentId":{"type":["string","null"]}},"required":["id","webhookId","type","status","problem","error","createdAt","workspaceId","workspaceName","ownerEmail","subscriptionId","paymentId"]}}},"required":["filter","summary","items"]},"example":{"filter":"problems","summary":{"stuck":-9007199254740991,"failing":-9007199254740991,"needsAction":-9007199254740991,"problems":-9007199254740991,"ignored7d":-9007199254740991,"received24h":-9007199254740991,"lastReceivedAt":"2026-09-19T12:00:00.000Z"},"items":[{"id":"01990000-0000-7000-8000-000000000001","webhookId":"example","type":"example","status":"pending","problem":"stuck","error":"example","createdAt":"2026-09-19T12:00:00.000Z","workspaceId":"example","workspaceName":"example","ownerEmail":"example","subscriptionId":"example","paymentId":"example"}]}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/billing/webhooks","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/billing/webhooks","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/billing/webhooks","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/billing/webhooks","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/billing/webhooks","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/billing/webhooks","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/billing/webhooks","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/billing/webhooks","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/billing/webhooks","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/billing/webhooks","traceId":"request-id"}}}}}}},"/v1/admin/billing/topups":{"get":{"operationId":"adminListTopupPacks","tags":["Admin"],"summary":"Every top-up pack (enabled or not) with its price per 1,000 credits and purchases, and each plan's rate for comparison","description":"Requires admin permission billing.read. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false}],"security":[{"session":[]},{"apiKey":[]}],"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"items":{"type":"array","items":{"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)$"},"slug":{"type":"string"},"name":{"type":"object","properties":{"ar":{"type":"string","minLength":1},"en":{"type":"string","minLength":1}},"required":["ar","en"]},"badge":{"anyOf":[{"type":"object","properties":{"ar":{"type":"string","maxLength":40},"en":{"type":"string","maxLength":40}},"required":["ar","en"],"description":"Short label on the card, e.g. Best value; both empty = no badge"},{"type":"null"}]},"credits":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"priceUsd":{"type":"number"},"dodoProductId":{"type":["string","null"]},"enabled":{"type":"boolean"},"sort":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"eligiblePlans":{"type":"array","items":{"type":"string"}},"usdPerThousand":{"type":"number"},"creditsPerUsd":{"type":"number"},"purchases":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Paid top-up invoices for this pack"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"}},"required":["id","slug","name","badge","credits","priceUsd","dodoProductId","enabled","sort","eligiblePlans","usdPerThousand","creditsPerUsd","purchases","createdAt","updatedAt"]}},"nextCursor":{"type":"null"},"plans":{"type":"array","items":{"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)$"},"slug":{"type":"string"},"name":{"type":"object","properties":{"ar":{"type":"string","minLength":1},"en":{"type":"string","minLength":1}},"required":["ar","en"]},"credits":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"monthlyUsd":{"type":"number"},"usdPerThousand":{"description":"Monthly price ÷ monthly credits × 1000; null for free plans","type":["number","null"]}},"required":["id","slug","name","credits","monthlyUsd","usdPerThousand"]}},"paymentProvider":{"type":"string","enum":["dodo","mock"]}},"required":["items","nextCursor","plans","paymentProvider"]},"example":{"items":[{"id":"01990000-0000-7000-8000-000000000001","slug":"example","name":{"ar":"مثال","en":"example"},"badge":{"ar":"مثال","en":"example"},"credits":-9007199254740991,"priceUsd":1,"dodoProductId":"example","enabled":true,"sort":-9007199254740991,"eligiblePlans":["example"],"usdPerThousand":1,"creditsPerUsd":1,"purchases":-9007199254740991,"createdAt":"2026-09-19T12:00:00.000Z","updatedAt":"2026-09-19T12:00:00.000Z"}],"nextCursor":null,"plans":[{"id":"01990000-0000-7000-8000-000000000001","slug":"example","name":{"ar":"مثال","en":"example"},"credits":-9007199254740991,"monthlyUsd":1,"usdPerThousand":"example"}],"paymentProvider":"dodo"}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/billing/topups","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/billing/topups","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/billing/topups","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/billing/topups","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/billing/topups","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/billing/topups","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/billing/topups","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/billing/topups","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/billing/topups","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/billing/topups","traceId":"request-id"}}}}}},"post":{"operationId":"adminCreateTopupPack","tags":["Admin"],"summary":"Add a top-up pack (422 dodoProductId/topup_product_duplicate, slug/topup_slug_duplicate, eligiblePlans/topup_plan_unknown)","description":"Requires admin permission billing.write. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"X-CSRF-Token","in":"header","required":false,"description":"Required for cookie-authenticated mutations; returned by sign-in/sign-up.","schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"name":{"type":"object","properties":{"ar":{"type":"string","minLength":1,"maxLength":80},"en":{"type":"string","minLength":1,"maxLength":80}},"required":["ar","en"]},"credits":{"type":"integer","minimum":1,"maximum":100000000},"priceUsd":{"description":"US dollars charged at checkout (cents precision)","type":"number","minimum":0.01,"maximum":100000},"dodoProductId":{"type":"string","minLength":1,"maxLength":200,"description":"Dodo Payments product id (create a one-time product in the Dodo dashboard at this price and paste its id); unique"},"enabled":{"default":true,"type":"boolean"},"sort":{"description":"Default: after the last pack","type":"integer","minimum":0,"maximum":100000},"badge":{"default":null,"anyOf":[{"type":"object","properties":{"ar":{"type":"string","maxLength":40},"en":{"type":"string","maxLength":40}},"required":["ar","en"],"description":"Short label on the card, e.g. Best value; both empty = no badge"},{"type":"null"}]},"eligiblePlans":{"default":[],"maxItems":20,"type":"array","items":{"type":"string","minLength":1,"maxLength":100},"description":"Plan slugs whose workspaces may buy the pack; empty = every plan, Free included"},"slug":{"description":"Default: topup-<credits>","type":"string","pattern":"^[a-z0-9][a-z0-9-]{0,62}$"}},"required":["name","credits","priceUsd","dodoProductId"]},"example":{"name":{"ar":"مثال","en":"example"},"credits":1,"priceUsd":0.01,"dodoProductId":"example","enabled":true,"sort":0,"badge":null,"eligiblePlans":[],"slug":"example"}}}},"responses":{"201":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","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)$"},"slug":{"type":"string"},"name":{"type":"object","properties":{"ar":{"type":"string","minLength":1},"en":{"type":"string","minLength":1}},"required":["ar","en"]},"badge":{"anyOf":[{"type":"object","properties":{"ar":{"type":"string","maxLength":40},"en":{"type":"string","maxLength":40}},"required":["ar","en"],"description":"Short label on the card, e.g. Best value; both empty = no badge"},{"type":"null"}]},"credits":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"priceUsd":{"type":"number"},"dodoProductId":{"type":["string","null"]},"enabled":{"type":"boolean"},"sort":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"eligiblePlans":{"type":"array","items":{"type":"string"}},"usdPerThousand":{"type":"number"},"creditsPerUsd":{"type":"number"},"purchases":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Paid top-up invoices for this pack"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"}},"required":["id","slug","name","badge","credits","priceUsd","dodoProductId","enabled","sort","eligiblePlans","usdPerThousand","creditsPerUsd","purchases","createdAt","updatedAt"]},"example":{"id":"01990000-0000-7000-8000-000000000001","slug":"example","name":{"ar":"مثال","en":"example"},"badge":{"ar":"مثال","en":"example"},"credits":-9007199254740991,"priceUsd":1,"dodoProductId":"example","enabled":true,"sort":-9007199254740991,"eligiblePlans":["example"],"usdPerThousand":1,"creditsPerUsd":1,"purchases":-9007199254740991,"createdAt":"2026-09-19T12:00:00.000Z","updatedAt":"2026-09-19T12:00:00.000Z"}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/billing/topups","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/billing/topups","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/billing/topups","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/billing/topups","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/billing/topups","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/billing/topups","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/billing/topups","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/billing/topups","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/billing/topups","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/billing/topups","traceId":"request-id"}}}}}}},"/v1/admin/billing/topups/{id}":{"patch":{"operationId":"adminUpdateTopupPack","tags":["Admin"],"summary":"Edit a pack; a disabled pack is hidden and cannot be bought, but payments already started still grant its credits","description":"Requires admin permission billing.write. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"X-CSRF-Token","in":"header","required":false,"description":"Required for cookie-authenticated mutations; returned by sign-in/sign-up.","schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"name":{"type":"object","properties":{"ar":{"type":"string","minLength":1,"maxLength":80},"en":{"type":"string","minLength":1,"maxLength":80}},"required":["ar","en"]},"credits":{"type":"integer","minimum":1,"maximum":100000000},"priceUsd":{"description":"US dollars charged at checkout (cents precision)","type":"number","minimum":0.01,"maximum":100000},"dodoProductId":{"type":"string","minLength":1,"maxLength":200,"description":"Dodo Payments product id (create a one-time product in the Dodo dashboard at this price and paste its id); unique"},"enabled":{"type":"boolean"},"sort":{"type":"integer","minimum":0,"maximum":100000},"badge":{"anyOf":[{"type":"object","properties":{"ar":{"type":"string","maxLength":40},"en":{"type":"string","maxLength":40}},"required":["ar","en"],"description":"Short label on the card, e.g. Best value; both empty = no badge"},{"type":"null"}]},"eligiblePlans":{"maxItems":20,"type":"array","items":{"type":"string","minLength":1,"maxLength":100},"description":"Plan slugs whose workspaces may buy the pack; empty = every plan, Free included"},"slug":{"type":"string","pattern":"^[a-z0-9][a-z0-9-]{0,62}$","description":"Lowercase letters, digits and dashes"}}},"example":{"name":{"ar":"مثال","en":"example"},"credits":1,"priceUsd":0.01,"dodoProductId":"example","enabled":true,"sort":0,"badge":{"ar":"مثال","en":"example"},"eligiblePlans":["example"],"slug":"example"}}}},"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","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)$"},"slug":{"type":"string"},"name":{"type":"object","properties":{"ar":{"type":"string","minLength":1},"en":{"type":"string","minLength":1}},"required":["ar","en"]},"badge":{"anyOf":[{"type":"object","properties":{"ar":{"type":"string","maxLength":40},"en":{"type":"string","maxLength":40}},"required":["ar","en"],"description":"Short label on the card, e.g. Best value; both empty = no badge"},{"type":"null"}]},"credits":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"priceUsd":{"type":"number"},"dodoProductId":{"type":["string","null"]},"enabled":{"type":"boolean"},"sort":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"eligiblePlans":{"type":"array","items":{"type":"string"}},"usdPerThousand":{"type":"number"},"creditsPerUsd":{"type":"number"},"purchases":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Paid top-up invoices for this pack"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"}},"required":["id","slug","name","badge","credits","priceUsd","dodoProductId","enabled","sort","eligiblePlans","usdPerThousand","creditsPerUsd","purchases","createdAt","updatedAt"]},"example":{"id":"01990000-0000-7000-8000-000000000001","slug":"example","name":{"ar":"مثال","en":"example"},"badge":{"ar":"مثال","en":"example"},"credits":-9007199254740991,"priceUsd":1,"dodoProductId":"example","enabled":true,"sort":-9007199254740991,"eligiblePlans":["example"],"usdPerThousand":1,"creditsPerUsd":1,"purchases":-9007199254740991,"createdAt":"2026-09-19T12:00:00.000Z","updatedAt":"2026-09-19T12:00:00.000Z"}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/billing/topups/{id}","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/billing/topups/{id}","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/billing/topups/{id}","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/billing/topups/{id}","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/billing/topups/{id}","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/billing/topups/{id}","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/billing/topups/{id}","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/billing/topups/{id}","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/billing/topups/{id}","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/billing/topups/{id}","traceId":"request-id"}}}}}},"delete":{"operationId":"adminDeleteTopupPack","tags":["Admin"],"summary":"Archive a pack (soft delete); payments already started still grant its credits","description":"Requires admin permission billing.write. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"X-CSRF-Token","in":"header","required":false,"description":"Required for cookie-authenticated mutations; returned by sign-in/sign-up.","schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"ok":{"type":"boolean"}},"required":["ok"]},"example":{"ok":true}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/billing/topups/{id}","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/billing/topups/{id}","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/billing/topups/{id}","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/billing/topups/{id}","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/billing/topups/{id}","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/billing/topups/{id}","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/billing/topups/{id}","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/billing/topups/{id}","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/billing/topups/{id}","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/billing/topups/{id}","traceId":"request-id"}}}}}}},"/v1/admin/billing/topups/reorder":{"post":{"operationId":"adminReorderTopupPacks","tags":["Admin"],"summary":"Set the display order (sort = position × 10)","description":"Requires admin permission billing.write. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"X-CSRF-Token","in":"header","required":false,"description":"Required for cookie-authenticated mutations; returned by sign-in/sign-up.","schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"ids":{"minItems":1,"maxItems":100,"type":"array","items":{"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)$"}}},"required":["ids"]},"example":{"ids":["01990000-0000-7000-8000-000000000001"]}}}},"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"items":{"type":"array","items":{"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)$"},"slug":{"type":"string"},"name":{"type":"object","properties":{"ar":{"type":"string","minLength":1},"en":{"type":"string","minLength":1}},"required":["ar","en"]},"badge":{"anyOf":[{"type":"object","properties":{"ar":{"type":"string","maxLength":40},"en":{"type":"string","maxLength":40}},"required":["ar","en"],"description":"Short label on the card, e.g. Best value; both empty = no badge"},{"type":"null"}]},"credits":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"priceUsd":{"type":"number"},"dodoProductId":{"type":["string","null"]},"enabled":{"type":"boolean"},"sort":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"eligiblePlans":{"type":"array","items":{"type":"string"}},"usdPerThousand":{"type":"number"},"creditsPerUsd":{"type":"number"},"purchases":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Paid top-up invoices for this pack"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"}},"required":["id","slug","name","badge","credits","priceUsd","dodoProductId","enabled","sort","eligiblePlans","usdPerThousand","creditsPerUsd","purchases","createdAt","updatedAt"]}},"nextCursor":{"type":"null"},"plans":{"type":"array","items":{"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)$"},"slug":{"type":"string"},"name":{"type":"object","properties":{"ar":{"type":"string","minLength":1},"en":{"type":"string","minLength":1}},"required":["ar","en"]},"credits":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"monthlyUsd":{"type":"number"},"usdPerThousand":{"description":"Monthly price ÷ monthly credits × 1000; null for free plans","type":["number","null"]}},"required":["id","slug","name","credits","monthlyUsd","usdPerThousand"]}},"paymentProvider":{"type":"string","enum":["dodo","mock"]}},"required":["items","nextCursor","plans","paymentProvider"]},"example":{"items":[{"id":"01990000-0000-7000-8000-000000000001","slug":"example","name":{"ar":"مثال","en":"example"},"badge":{"ar":"مثال","en":"example"},"credits":-9007199254740991,"priceUsd":1,"dodoProductId":"example","enabled":true,"sort":-9007199254740991,"eligiblePlans":["example"],"usdPerThousand":1,"creditsPerUsd":1,"purchases":-9007199254740991,"createdAt":"2026-09-19T12:00:00.000Z","updatedAt":"2026-09-19T12:00:00.000Z"}],"nextCursor":null,"plans":[{"id":"01990000-0000-7000-8000-000000000001","slug":"example","name":{"ar":"مثال","en":"example"},"credits":-9007199254740991,"monthlyUsd":1,"usdPerThousand":"example"}],"paymentProvider":"dodo"}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/billing/topups/reorder","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/billing/topups/reorder","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/billing/topups/reorder","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/billing/topups/reorder","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/billing/topups/reorder","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/billing/topups/reorder","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/billing/topups/reorder","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/billing/topups/reorder","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/billing/topups/reorder","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/billing/topups/reorder","traceId":"request-id"}}}}}}},"/v1/admin/blocked-patterns":{"get":{"operationId":"adminListBlockedPatterns","tags":["Admin"],"summary":"admin List Blocked Patterns","description":"Requires admin permission moderation.read. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"cursor","in":"query","required":false,"schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"schema":{"default":25,"type":"integer","minimum":1,"maximum":100}},{"name":"q","in":"query","required":false,"schema":{"type":"string","maxLength":200}}],"security":[{"session":[]},{"apiKey":[]}],"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"items":{"type":"array","items":{"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)$"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"},"data":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}}},"required":["id","createdAt","updatedAt"],"additionalProperties":{}}},"nextCursor":{"type":["string","null"]}},"required":["items","nextCursor"]},"example":{"items":[{"id":"01990000-0000-7000-8000-000000000001","createdAt":"2026-09-19T12:00:00.000Z","updatedAt":"2026-09-19T12:00:00.000Z","data":{}}],"nextCursor":"example"}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/blocked-patterns","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/blocked-patterns","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/blocked-patterns","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/blocked-patterns","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/blocked-patterns","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/blocked-patterns","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/blocked-patterns","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/blocked-patterns","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/blocked-patterns","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/blocked-patterns","traceId":"request-id"}}}}}},"post":{"operationId":"adminCreateBlockedPatterns","tags":["Admin"],"summary":"admin Create Blocked Patterns","description":"Requires admin permission moderation.write. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"X-CSRF-Token","in":"header","required":false,"description":"Required for cookie-authenticated mutations; returned by sign-in/sign-up.","schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"kind":{"default":"blocked-pattern","type":"string","const":"blocked-pattern"},"text":{"type":"string","minLength":1,"maxLength":1000},"enabled":{"default":true,"type":"boolean"},"reason":{"type":"string","minLength":1,"maxLength":1000}},"required":["text"]},"example":{"kind":"blocked-pattern","text":"مرحباً بك في فوكلا.","enabled":true,"reason":"example"}}}},"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","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)$"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"},"data":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}}},"required":["id","createdAt","updatedAt"],"additionalProperties":{}},"example":{"id":"01990000-0000-7000-8000-000000000001","createdAt":"2026-09-19T12:00:00.000Z","updatedAt":"2026-09-19T12:00:00.000Z","data":{}}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/blocked-patterns","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/blocked-patterns","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/blocked-patterns","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/blocked-patterns","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/blocked-patterns","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/blocked-patterns","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/blocked-patterns","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/blocked-patterns","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/blocked-patterns","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/blocked-patterns","traceId":"request-id"}}}}}}},"/v1/admin/blocked-patterns/{id}":{"patch":{"operationId":"adminUpdateBlockedPatterns","tags":["Admin"],"summary":"admin Update Blocked Patterns","description":"Requires admin permission moderation.write. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"X-CSRF-Token","in":"header","required":false,"description":"Required for cookie-authenticated mutations; returned by sign-in/sign-up.","schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"kind":{"default":"blocked-pattern","type":"string","const":"blocked-pattern"},"text":{"type":"string","minLength":1,"maxLength":1000},"enabled":{"default":true,"type":"boolean"},"reason":{"type":"string","minLength":1,"maxLength":1000}}},"example":{"kind":"blocked-pattern","text":"مرحباً بك في فوكلا.","enabled":true,"reason":"example"}}}},"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","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)$"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"},"data":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}}},"required":["id","createdAt","updatedAt"],"additionalProperties":{}},"example":{"id":"01990000-0000-7000-8000-000000000001","createdAt":"2026-09-19T12:00:00.000Z","updatedAt":"2026-09-19T12:00:00.000Z","data":{}}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/blocked-patterns/{id}","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/blocked-patterns/{id}","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/blocked-patterns/{id}","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/blocked-patterns/{id}","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/blocked-patterns/{id}","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/blocked-patterns/{id}","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/blocked-patterns/{id}","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/blocked-patterns/{id}","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/blocked-patterns/{id}","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/blocked-patterns/{id}","traceId":"request-id"}}}}}},"delete":{"operationId":"adminDeleteBlockedPatterns","tags":["Admin"],"summary":"admin Delete Blocked Patterns","description":"Requires admin permission moderation.write. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"X-CSRF-Token","in":"header","required":false,"description":"Required for cookie-authenticated mutations; returned by sign-in/sign-up.","schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"ok":{"type":"boolean"}},"required":["ok"]},"example":{"ok":true}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/blocked-patterns/{id}","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/blocked-patterns/{id}","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/blocked-patterns/{id}","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/blocked-patterns/{id}","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/blocked-patterns/{id}","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/blocked-patterns/{id}","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/blocked-patterns/{id}","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/blocked-patterns/{id}","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/blocked-patterns/{id}","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/blocked-patterns/{id}","traceId":"request-id"}}}}}}},"/v1/admin/plans":{"get":{"operationId":"adminListPlans","tags":["Admin"],"summary":"admin List Plans","description":"Requires admin permission billing.read. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"cursor","in":"query","required":false,"schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"schema":{"default":25,"type":"integer","minimum":1,"maximum":100}},{"name":"q","in":"query","required":false,"schema":{"type":"string","maxLength":200}}],"security":[{"session":[]},{"apiKey":[]}],"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"items":{"type":"array","items":{"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)$"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"},"data":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}}},"required":["id","createdAt","updatedAt"],"additionalProperties":{}}},"nextCursor":{"type":["string","null"]}},"required":["items","nextCursor"]},"example":{"items":[{"id":"01990000-0000-7000-8000-000000000001","createdAt":"2026-09-19T12:00:00.000Z","updatedAt":"2026-09-19T12:00:00.000Z","data":{}}],"nextCursor":"example"}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/plans","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/plans","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/plans","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/plans","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/plans","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/plans","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/plans","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/plans","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/plans","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/plans","traceId":"request-id"}}}}}},"post":{"operationId":"adminCreatePlans","tags":["Admin"],"summary":"admin Create Plans","description":"Requires admin permission billing.write. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"X-CSRF-Token","in":"header","required":false,"description":"Required for cookie-authenticated mutations; returned by sign-in/sign-up.","schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"slug":{"type":"string","minLength":1,"maxLength":100},"name":{"type":"object","properties":{"ar":{"type":"string","minLength":1},"en":{"type":"string","minLength":1}},"required":["ar","en"]},"credits":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"monthlyUsd":{"type":"number","minimum":0},"annualUsd":{"type":"number","minimum":0},"entitlements":{"type":"object","properties":{"commercialRights":{"type":"boolean"},"wavExport":{"type":"boolean"},"premiumVoices":{"type":"boolean"},"apiKeys":{"type":"boolean"},"maxProjects":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"retentionDays":{"anyOf":[{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},{"type":"null"}]},"voiceCloning":{"default":false,"type":"boolean"},"voiceChanger":{"default":false,"description":"Voice changer (speech to speech); paid plans","type":"boolean"},"voiceClones":{"default":0,"type":"integer","minimum":0,"maximum":9007199254740991},"dubbingMaxMinutes":{"description":"Longest video or audio (minutes) a dubbing project may take; 0 = no dubbing","type":"integer","minimum":0,"maximum":240},"transcriptMaxMinutes":{"description":"Longest audio or video (minutes) speech to text and captions take per file; 0 = none","type":"integer","minimum":0,"maximum":600},"voiceChangerMaxSeconds":{"description":"Longest audio (seconds) the voice changer and voice cleaner take per file (60 = 1 minute); 0 = neither","type":"integer","minimum":0,"maximum":3600},"seats":{"description":"Members a workspace on this plan may have (pending invites count); null = unlimited","anyOf":[{"type":"integer","exclusiveMinimum":0,"maximum":100000},{"type":"null"}]},"videoGeneration":{"default":false,"description":"AI video generation (Video studio); refusals are 403 with errors[0].path = the entitlement key","type":"boolean"},"videoSecondsPerMonth":{"default":0,"description":"Video seconds a workspace may render per calendar month (UTC); 0 = none","type":"integer","minimum":0,"maximum":1000000},"videoMaxSecondsPerVideo":{"default":0,"description":"Longest video (seconds of voice-over) a project may have","type":"integer","minimum":0,"maximum":600},"videoMaxResolution":{"default":"720p","description":"Highest output resolution","type":"string","enum":["720p","1080p","4k"]},"videoAspectRatios":{"default":[],"description":"Aspect ratios the plan may render","maxItems":3,"type":"array","items":{"type":"string","enum":["9:16","16:9","1:1"]}},"videoTiers":{"default":[],"description":"Video quality tiers (product model slugs with data.kind = video) the plan may use","maxItems":20,"type":"array","items":{"type":"string","minLength":1,"maxLength":100}},"videoConcurrentRenders":{"default":0,"description":"Scenes rendering at once, and projects rendering at once, per workspace","type":"integer","minimum":0,"maximum":32},"videoStoryboard":{"default":false,"description":"Storyboard stills for approval before rendering","type":"boolean"},"videoImageToVideo":{"default":false,"description":"Upload a product photo as the first frame","type":"boolean"},"videoMusicBed":{"default":false,"description":"Background music bed ducked under the voice","type":"boolean"},"videoWatermark":{"default":true,"description":"Burn a small Vocla watermark into the video","type":"boolean"},"videoProjects":{"default":0,"description":"Active (not deleted) video projects a workspace may keep","type":"integer","minimum":0,"maximum":100000},"dialogue":{"default":false,"description":"Text to Dialogue (multi-speaker scripts)","type":"boolean"},"music":{"default":false,"description":"Music generation, song section regeneration and lyric edits","type":"boolean"},"voiceDesign":{"default":false,"description":"Voice design (a new voice from a description)","type":"boolean"},"speechToText":{"default":false,"description":"Speech to text, transcript translation and AI captions (transcriptMaxMinutes caps each file)","type":"boolean"},"dubbing":{"default":false,"description":"Dubbing projects and dub renders (dubbingMaxMinutes caps each video)","type":"boolean"},"autoTags":{"default":false,"description":"Auto Tags: AI places directions, sounds and pauses in a script (credits per run in Admin → Engine → Tags)","type":"boolean"},"videoEdit":{"default":false,"description":"AI video edit studio (remove, add, replace); refusals are 403 with errors[0].path = the entitlement key","type":"boolean"},"videoEditSecondsPerMonth":{"default":0,"description":"Read only: seconds of edits the monthly credits of the plan buy on its cheapest tier (credits ÷ credits per second). Worked out on every read; a saved value is ignored. Not a cap: edits are limited by credits alone, top-ups included","type":"integer","minimum":0,"maximum":100000000},"videoEditMaxSeconds":{"default":0,"description":"Longest clip (seconds) one edit may take (the model itself takes 3 to 15)","type":"integer","minimum":0,"maximum":120},"videoEditTiers":{"default":[],"description":"Edit quality tiers (product model slugs with data.videoEdit) the plan may use","maxItems":20,"type":"array","items":{"type":"string","minLength":1,"maxLength":100}},"videoEditConcurrent":{"default":0,"description":"Edits running at once per workspace","type":"integer","minimum":0,"maximum":32},"videoEditRates":{"default":{},"description":"Credits per second this plan pays on a tier (tier slug → credits); a tier left out costs its own rate. Read back with every tier of the plan filled in","type":"object","propertyNames":{"type":"string","minLength":1,"maxLength":100},"additionalProperties":{"type":"integer","minimum":1,"maximum":1000000}},"cartoonStudio":{"default":false,"description":"Cartoon studio; refusals are 403 with errors[0].path = the entitlement key. Episodes render on the plan video tiers, aspect ratios, resolution and watermark","type":"boolean"},"cartoonSecondsPerMonth":{"default":0,"description":"Cartoon seconds a workspace may produce per calendar month (UTC); 0 = none","type":"integer","minimum":0,"maximum":1000000},"cartoonMaxSeconds":{"default":0,"description":"Longest episode (seconds)","type":"integer","minimum":0,"maximum":600},"cartoonCharacters":{"default":0,"description":"Characters per episode (the narrator is free)","type":"integer","minimum":0,"maximum":12},"cartoonSeries":{"default":false,"description":"Named series (Detective Conan, ThunderCats…); styles are open to every plan with the studio","type":"boolean"},"cartoonOpening":{"default":false,"description":"A sung opening (theme song with Arabic lyrics) before the episode","type":"boolean"},"cartoonStems":{"default":false,"description":"Download the five audio lanes (dialogue, effects, foley, ambience, music) as WAV stems","type":"boolean"},"cartoonProjects":{"default":0,"description":"Active (not deleted) cartoon projects a workspace may keep","type":"integer","minimum":0,"maximum":100000},"languagePack":{"default":false,"description":"The languages pack: speech in the 118 pack languages an admin has switched on (the 13 core languages need no pack). A pack language without it is a 403 with errors[0] = {path: languagePack, code: plan}","type":"boolean"},"ivrPack":{"default":false,"description":"Phone menu (IVR) packs: many prompts in one voice, exported in phone-system formats","type":"boolean"},"adSpots":{"default":false,"description":"Ad spot maker: voiceover + music + effects mixed into 15/30/60 s spots","type":"boolean"},"brandVoice":{"default":false,"description":"Brand voice: an exclusive workspace voice, brand kit and approval before download","type":"boolean"},"imageGeneration":{"default":false,"description":"The image studio (make images from a description); credits are the limit","type":"boolean"},"imageEdit":{"default":false,"description":"Editing photos and using reference photos (any run with a photo); without it the studio only makes images from a description","type":"boolean"},"imageTiers":{"default":[],"description":"Image quality tiers (product model slugs with data.kind = image) the plan may use","maxItems":20,"type":"array","items":{"type":"string","minLength":1,"maxLength":100}},"imageMaxResolution":{"default":"1K","description":"Largest size the plan may ask for","type":"string","enum":["1K","2K","4K"]},"imageMaxReferences":{"default":0,"description":"Reference photos one run may take (an image being edited counts as one)","type":"integer","minimum":0,"maximum":16},"imageTransparent":{"default":false,"description":"Transparent backgrounds (tiers that offer them)","type":"boolean"},"imageBatch":{"default":1,"description":"Images one run may make","type":"integer","minimum":1,"maximum":4},"imageConcurrent":{"default":1,"description":"Runs in progress at once per workspace","type":"integer","minimum":0,"maximum":32},"imageRemoveBackground":{"default":false,"description":"The background removal tool (one photo in, the subject on a clear background)","type":"boolean"},"imageEnhance":{"default":false,"description":"The enhance tool (the same photo sharper at 2K, or 4K within imageMaxResolution)","type":"boolean"},"imageToolCredits":{"default":{},"description":"Credits per image for the tools on this plan; a missing price uses the default (background removal 300, enhance 400 at 2K and 700 at 4K)","type":"object","properties":{"removeBackground":{"type":"integer","minimum":1,"maximum":100000},"enhance2K":{"type":"integer","minimum":1,"maximum":100000},"enhance4K":{"type":"integer","minimum":1,"maximum":100000}}}},"required":["commercialRights","wavExport","premiumVoices","apiKeys","maxProjects","retentionDays"]},"data":{"default":{},"type":"object","properties":{"products":{"type":"object","properties":{"monthly":{"type":"string"},"annual":{"type":"string"}}},"status":{"type":"string","enum":["draft","active","archived"]},"lifecycle":{"type":"string","enum":["draft","active","archived"]},"notes":{"type":"string","maxLength":2000},"availability":{"description":"Country availability: all (default), exclude (hidden in countries) or include (only in countries); see docs/BACKEND_HANDOFF.md","type":"object","properties":{"mode":{"type":"string","enum":["all","exclude","include"],"description":"all = on sale everywhere; exclude = hidden in `countries` (unknown countries still see it); include = offered only in `countries` (hidden from unknown countries)"},"countries":{"default":[],"description":"ISO 3166-1 alpha-2 codes","maxItems":250,"type":"array","items":{"type":"string"}}},"required":["mode"],"additionalProperties":false},"creditOverrides":{"description":"Monthly credits by country (Free plan only; others are refused): [{country,credits}], replaced whole; see docs/COUNTRY_CREDIT_OVERRIDES.md","maxItems":250,"type":"array","items":{"type":"object","properties":{"country":{"type":"string","description":"ISO 3166-1 alpha-2 code"},"credits":{"type":"integer","exclusiveMinimum":0,"maximum":1000000000,"description":"Monthly credits in this country instead of the plan's `credits`"}},"required":["country","credits"],"additionalProperties":false}}},"additionalProperties":{}}},"required":["slug","name","credits","monthlyUsd","annualUsd","entitlements"]},"example":{"slug":"example","name":{"ar":"مثال","en":"example"},"credits":1,"monthlyUsd":0,"annualUsd":0,"entitlements":{"commercialRights":true,"wavExport":true,"premiumVoices":true,"apiKeys":true,"maxProjects":1,"retentionDays":1,"voiceCloning":false,"voiceChanger":false,"voiceClones":0,"dubbingMaxMinutes":0,"transcriptMaxMinutes":0,"voiceChangerMaxSeconds":0,"seats":1,"videoGeneration":false,"videoSecondsPerMonth":0,"videoMaxSecondsPerVideo":0,"videoMaxResolution":"720p","videoAspectRatios":[],"videoTiers":[],"videoConcurrentRenders":0,"videoStoryboard":false,"videoImageToVideo":false,"videoMusicBed":false,"videoWatermark":true,"videoProjects":0,"dialogue":false,"music":false,"voiceDesign":false,"speechToText":false,"dubbing":false,"autoTags":false,"videoEdit":false,"videoEditSecondsPerMonth":0,"videoEditMaxSeconds":0,"videoEditTiers":[],"videoEditConcurrent":0,"videoEditRates":{},"cartoonStudio":false,"cartoonSecondsPerMonth":0,"cartoonMaxSeconds":0,"cartoonCharacters":0,"cartoonSeries":false,"cartoonOpening":false,"cartoonStems":false,"cartoonProjects":0,"languagePack":false,"ivrPack":false,"adSpots":false,"brandVoice":false,"imageGeneration":false,"imageEdit":false,"imageTiers":[],"imageMaxResolution":"1K","imageMaxReferences":0,"imageTransparent":false,"imageBatch":1,"imageConcurrent":1,"imageRemoveBackground":false,"imageEnhance":false,"imageToolCredits":{}},"data":{}}}}},"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","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)$"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"},"data":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}}},"required":["id","createdAt","updatedAt"],"additionalProperties":{}},"example":{"id":"01990000-0000-7000-8000-000000000001","createdAt":"2026-09-19T12:00:00.000Z","updatedAt":"2026-09-19T12:00:00.000Z","data":{}}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/plans","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/plans","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/plans","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/plans","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/plans","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/plans","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/plans","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/plans","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/plans","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/plans","traceId":"request-id"}}}}}}},"/v1/admin/plans/{id}":{"patch":{"operationId":"adminUpdatePlans","tags":["Admin"],"summary":"admin Update Plans","description":"Requires admin permission billing.write. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"X-CSRF-Token","in":"header","required":false,"description":"Required for cookie-authenticated mutations; returned by sign-in/sign-up.","schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"slug":{"type":"string","minLength":1,"maxLength":100},"name":{"type":"object","properties":{"ar":{"type":"string","minLength":1},"en":{"type":"string","minLength":1}},"required":["ar","en"]},"credits":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"monthlyUsd":{"type":"number","minimum":0},"annualUsd":{"type":"number","minimum":0},"entitlements":{"type":"object","properties":{"commercialRights":{"type":"boolean"},"wavExport":{"type":"boolean"},"premiumVoices":{"type":"boolean"},"apiKeys":{"type":"boolean"},"maxProjects":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"retentionDays":{"anyOf":[{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},{"type":"null"}]},"voiceCloning":{"default":false,"type":"boolean"},"voiceChanger":{"default":false,"description":"Voice changer (speech to speech); paid plans","type":"boolean"},"voiceClones":{"default":0,"type":"integer","minimum":0,"maximum":9007199254740991},"dubbingMaxMinutes":{"description":"Longest video or audio (minutes) a dubbing project may take; 0 = no dubbing","type":"integer","minimum":0,"maximum":240},"transcriptMaxMinutes":{"description":"Longest audio or video (minutes) speech to text and captions take per file; 0 = none","type":"integer","minimum":0,"maximum":600},"voiceChangerMaxSeconds":{"description":"Longest audio (seconds) the voice changer and voice cleaner take per file (60 = 1 minute); 0 = neither","type":"integer","minimum":0,"maximum":3600},"seats":{"description":"Members a workspace on this plan may have (pending invites count); null = unlimited","anyOf":[{"type":"integer","exclusiveMinimum":0,"maximum":100000},{"type":"null"}]},"videoGeneration":{"default":false,"description":"AI video generation (Video studio); refusals are 403 with errors[0].path = the entitlement key","type":"boolean"},"videoSecondsPerMonth":{"default":0,"description":"Video seconds a workspace may render per calendar month (UTC); 0 = none","type":"integer","minimum":0,"maximum":1000000},"videoMaxSecondsPerVideo":{"default":0,"description":"Longest video (seconds of voice-over) a project may have","type":"integer","minimum":0,"maximum":600},"videoMaxResolution":{"default":"720p","description":"Highest output resolution","type":"string","enum":["720p","1080p","4k"]},"videoAspectRatios":{"default":[],"description":"Aspect ratios the plan may render","maxItems":3,"type":"array","items":{"type":"string","enum":["9:16","16:9","1:1"]}},"videoTiers":{"default":[],"description":"Video quality tiers (product model slugs with data.kind = video) the plan may use","maxItems":20,"type":"array","items":{"type":"string","minLength":1,"maxLength":100}},"videoConcurrentRenders":{"default":0,"description":"Scenes rendering at once, and projects rendering at once, per workspace","type":"integer","minimum":0,"maximum":32},"videoStoryboard":{"default":false,"description":"Storyboard stills for approval before rendering","type":"boolean"},"videoImageToVideo":{"default":false,"description":"Upload a product photo as the first frame","type":"boolean"},"videoMusicBed":{"default":false,"description":"Background music bed ducked under the voice","type":"boolean"},"videoWatermark":{"default":true,"description":"Burn a small Vocla watermark into the video","type":"boolean"},"videoProjects":{"default":0,"description":"Active (not deleted) video projects a workspace may keep","type":"integer","minimum":0,"maximum":100000},"dialogue":{"default":false,"description":"Text to Dialogue (multi-speaker scripts)","type":"boolean"},"music":{"default":false,"description":"Music generation, song section regeneration and lyric edits","type":"boolean"},"voiceDesign":{"default":false,"description":"Voice design (a new voice from a description)","type":"boolean"},"speechToText":{"default":false,"description":"Speech to text, transcript translation and AI captions (transcriptMaxMinutes caps each file)","type":"boolean"},"dubbing":{"default":false,"description":"Dubbing projects and dub renders (dubbingMaxMinutes caps each video)","type":"boolean"},"autoTags":{"default":false,"description":"Auto Tags: AI places directions, sounds and pauses in a script (credits per run in Admin → Engine → Tags)","type":"boolean"},"videoEdit":{"default":false,"description":"AI video edit studio (remove, add, replace); refusals are 403 with errors[0].path = the entitlement key","type":"boolean"},"videoEditSecondsPerMonth":{"default":0,"description":"Read only: seconds of edits the monthly credits of the plan buy on its cheapest tier (credits ÷ credits per second). Worked out on every read; a saved value is ignored. Not a cap: edits are limited by credits alone, top-ups included","type":"integer","minimum":0,"maximum":100000000},"videoEditMaxSeconds":{"default":0,"description":"Longest clip (seconds) one edit may take (the model itself takes 3 to 15)","type":"integer","minimum":0,"maximum":120},"videoEditTiers":{"default":[],"description":"Edit quality tiers (product model slugs with data.videoEdit) the plan may use","maxItems":20,"type":"array","items":{"type":"string","minLength":1,"maxLength":100}},"videoEditConcurrent":{"default":0,"description":"Edits running at once per workspace","type":"integer","minimum":0,"maximum":32},"videoEditRates":{"default":{},"description":"Credits per second this plan pays on a tier (tier slug → credits); a tier left out costs its own rate. Read back with every tier of the plan filled in","type":"object","propertyNames":{"type":"string","minLength":1,"maxLength":100},"additionalProperties":{"type":"integer","minimum":1,"maximum":1000000}},"cartoonStudio":{"default":false,"description":"Cartoon studio; refusals are 403 with errors[0].path = the entitlement key. Episodes render on the plan video tiers, aspect ratios, resolution and watermark","type":"boolean"},"cartoonSecondsPerMonth":{"default":0,"description":"Cartoon seconds a workspace may produce per calendar month (UTC); 0 = none","type":"integer","minimum":0,"maximum":1000000},"cartoonMaxSeconds":{"default":0,"description":"Longest episode (seconds)","type":"integer","minimum":0,"maximum":600},"cartoonCharacters":{"default":0,"description":"Characters per episode (the narrator is free)","type":"integer","minimum":0,"maximum":12},"cartoonSeries":{"default":false,"description":"Named series (Detective Conan, ThunderCats…); styles are open to every plan with the studio","type":"boolean"},"cartoonOpening":{"default":false,"description":"A sung opening (theme song with Arabic lyrics) before the episode","type":"boolean"},"cartoonStems":{"default":false,"description":"Download the five audio lanes (dialogue, effects, foley, ambience, music) as WAV stems","type":"boolean"},"cartoonProjects":{"default":0,"description":"Active (not deleted) cartoon projects a workspace may keep","type":"integer","minimum":0,"maximum":100000},"languagePack":{"default":false,"description":"The languages pack: speech in the 118 pack languages an admin has switched on (the 13 core languages need no pack). A pack language without it is a 403 with errors[0] = {path: languagePack, code: plan}","type":"boolean"},"ivrPack":{"default":false,"description":"Phone menu (IVR) packs: many prompts in one voice, exported in phone-system formats","type":"boolean"},"adSpots":{"default":false,"description":"Ad spot maker: voiceover + music + effects mixed into 15/30/60 s spots","type":"boolean"},"brandVoice":{"default":false,"description":"Brand voice: an exclusive workspace voice, brand kit and approval before download","type":"boolean"},"imageGeneration":{"default":false,"description":"The image studio (make images from a description); credits are the limit","type":"boolean"},"imageEdit":{"default":false,"description":"Editing photos and using reference photos (any run with a photo); without it the studio only makes images from a description","type":"boolean"},"imageTiers":{"default":[],"description":"Image quality tiers (product model slugs with data.kind = image) the plan may use","maxItems":20,"type":"array","items":{"type":"string","minLength":1,"maxLength":100}},"imageMaxResolution":{"default":"1K","description":"Largest size the plan may ask for","type":"string","enum":["1K","2K","4K"]},"imageMaxReferences":{"default":0,"description":"Reference photos one run may take (an image being edited counts as one)","type":"integer","minimum":0,"maximum":16},"imageTransparent":{"default":false,"description":"Transparent backgrounds (tiers that offer them)","type":"boolean"},"imageBatch":{"default":1,"description":"Images one run may make","type":"integer","minimum":1,"maximum":4},"imageConcurrent":{"default":1,"description":"Runs in progress at once per workspace","type":"integer","minimum":0,"maximum":32},"imageRemoveBackground":{"default":false,"description":"The background removal tool (one photo in, the subject on a clear background)","type":"boolean"},"imageEnhance":{"default":false,"description":"The enhance tool (the same photo sharper at 2K, or 4K within imageMaxResolution)","type":"boolean"},"imageToolCredits":{"default":{},"description":"Credits per image for the tools on this plan; a missing price uses the default (background removal 300, enhance 400 at 2K and 700 at 4K)","type":"object","properties":{"removeBackground":{"type":"integer","minimum":1,"maximum":100000},"enhance2K":{"type":"integer","minimum":1,"maximum":100000},"enhance4K":{"type":"integer","minimum":1,"maximum":100000}}}},"required":["commercialRights","wavExport","premiumVoices","apiKeys","maxProjects","retentionDays"]},"data":{"default":{},"type":"object","properties":{"products":{"type":"object","properties":{"monthly":{"type":"string"},"annual":{"type":"string"}}},"status":{"type":"string","enum":["draft","active","archived"]},"lifecycle":{"type":"string","enum":["draft","active","archived"]},"notes":{"type":"string","maxLength":2000},"availability":{"description":"Country availability: all (default), exclude (hidden in countries) or include (only in countries); see docs/BACKEND_HANDOFF.md","type":"object","properties":{"mode":{"type":"string","enum":["all","exclude","include"],"description":"all = on sale everywhere; exclude = hidden in `countries` (unknown countries still see it); include = offered only in `countries` (hidden from unknown countries)"},"countries":{"default":[],"description":"ISO 3166-1 alpha-2 codes","maxItems":250,"type":"array","items":{"type":"string"}}},"required":["mode"],"additionalProperties":false},"creditOverrides":{"description":"Monthly credits by country (Free plan only; others are refused): [{country,credits}], replaced whole; see docs/COUNTRY_CREDIT_OVERRIDES.md","maxItems":250,"type":"array","items":{"type":"object","properties":{"country":{"type":"string","description":"ISO 3166-1 alpha-2 code"},"credits":{"type":"integer","exclusiveMinimum":0,"maximum":1000000000,"description":"Monthly credits in this country instead of the plan's `credits`"}},"required":["country","credits"],"additionalProperties":false}}},"additionalProperties":{}}}},"example":{"slug":"example","name":{"ar":"مثال","en":"example"},"credits":1,"monthlyUsd":0,"annualUsd":0,"entitlements":{"commercialRights":true,"wavExport":true,"premiumVoices":true,"apiKeys":true,"maxProjects":1,"retentionDays":1,"voiceCloning":false,"voiceChanger":false,"voiceClones":0,"dubbingMaxMinutes":0,"transcriptMaxMinutes":0,"voiceChangerMaxSeconds":0,"seats":1,"videoGeneration":false,"videoSecondsPerMonth":0,"videoMaxSecondsPerVideo":0,"videoMaxResolution":"720p","videoAspectRatios":[],"videoTiers":[],"videoConcurrentRenders":0,"videoStoryboard":false,"videoImageToVideo":false,"videoMusicBed":false,"videoWatermark":true,"videoProjects":0,"dialogue":false,"music":false,"voiceDesign":false,"speechToText":false,"dubbing":false,"autoTags":false,"videoEdit":false,"videoEditSecondsPerMonth":0,"videoEditMaxSeconds":0,"videoEditTiers":[],"videoEditConcurrent":0,"videoEditRates":{},"cartoonStudio":false,"cartoonSecondsPerMonth":0,"cartoonMaxSeconds":0,"cartoonCharacters":0,"cartoonSeries":false,"cartoonOpening":false,"cartoonStems":false,"cartoonProjects":0,"languagePack":false,"ivrPack":false,"adSpots":false,"brandVoice":false,"imageGeneration":false,"imageEdit":false,"imageTiers":[],"imageMaxResolution":"1K","imageMaxReferences":0,"imageTransparent":false,"imageBatch":1,"imageConcurrent":1,"imageRemoveBackground":false,"imageEnhance":false,"imageToolCredits":{}},"data":{}}}}},"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","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)$"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"},"data":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}}},"required":["id","createdAt","updatedAt"],"additionalProperties":{}},"example":{"id":"01990000-0000-7000-8000-000000000001","createdAt":"2026-09-19T12:00:00.000Z","updatedAt":"2026-09-19T12:00:00.000Z","data":{}}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/plans/{id}","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/plans/{id}","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/plans/{id}","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/plans/{id}","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/plans/{id}","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/plans/{id}","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/plans/{id}","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/plans/{id}","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/plans/{id}","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/plans/{id}","traceId":"request-id"}}}}}},"delete":{"operationId":"adminDeletePlans","tags":["Admin"],"summary":"admin Delete Plans","description":"Requires admin permission billing.write. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"X-CSRF-Token","in":"header","required":false,"description":"Required for cookie-authenticated mutations; returned by sign-in/sign-up.","schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"ok":{"type":"boolean"}},"required":["ok"]},"example":{"ok":true}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/plans/{id}","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/plans/{id}","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/plans/{id}","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/plans/{id}","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/plans/{id}","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/plans/{id}","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/plans/{id}","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/plans/{id}","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/plans/{id}","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/plans/{id}","traceId":"request-id"}}}}}}},"/v1/admin/providers":{"get":{"operationId":"adminListProviders","tags":["Admin"],"summary":"admin List Providers","description":"Requires admin permission providers.read. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"cursor","in":"query","required":false,"schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"schema":{"default":25,"type":"integer","minimum":1,"maximum":100}},{"name":"q","in":"query","required":false,"schema":{"type":"string","maxLength":200}}],"security":[{"session":[]},{"apiKey":[]}],"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"items":{"type":"array","items":{"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)$"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"},"data":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}}},"required":["id","createdAt","updatedAt"],"additionalProperties":{}}},"nextCursor":{"type":["string","null"]}},"required":["items","nextCursor"]},"example":{"items":[{"id":"01990000-0000-7000-8000-000000000001","createdAt":"2026-09-19T12:00:00.000Z","updatedAt":"2026-09-19T12:00:00.000Z","data":{}}],"nextCursor":"example"}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/providers","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/providers","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/providers","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/providers","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/providers","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/providers","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/providers","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/providers","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/providers","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/providers","traceId":"request-id"}}}}}},"post":{"operationId":"adminCreateProviders","tags":["Admin"],"summary":"admin Create Providers","description":"Requires admin permission providers.write. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"X-CSRF-Token","in":"header","required":false,"description":"Required for cookie-authenticated mutations; returned by sign-in/sign-up.","schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":100},"enabled":{"type":"boolean"},"quotaPerMinute":{"type":"number","exclusiveMinimum":0}},"required":["name","enabled"]},"example":{"name":"Noura","enabled":true,"quotaPerMinute":1}}}},"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","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)$"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"},"data":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}}},"required":["id","createdAt","updatedAt"],"additionalProperties":{}},"example":{"id":"01990000-0000-7000-8000-000000000001","createdAt":"2026-09-19T12:00:00.000Z","updatedAt":"2026-09-19T12:00:00.000Z","data":{}}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/providers","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/providers","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/providers","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/providers","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/providers","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/providers","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/providers","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/providers","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/providers","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/providers","traceId":"request-id"}}}}}}},"/v1/admin/providers/{id}":{"patch":{"operationId":"adminUpdateProviders","tags":["Admin"],"summary":"admin Update Providers","description":"Requires admin permission providers.write. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"X-CSRF-Token","in":"header","required":false,"description":"Required for cookie-authenticated mutations; returned by sign-in/sign-up.","schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":100},"enabled":{"type":"boolean"},"quotaPerMinute":{"type":"number","exclusiveMinimum":0}}},"example":{"name":"Noura","enabled":true,"quotaPerMinute":1}}}},"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","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)$"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"},"data":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}}},"required":["id","createdAt","updatedAt"],"additionalProperties":{}},"example":{"id":"01990000-0000-7000-8000-000000000001","createdAt":"2026-09-19T12:00:00.000Z","updatedAt":"2026-09-19T12:00:00.000Z","data":{}}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/providers/{id}","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/providers/{id}","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/providers/{id}","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/providers/{id}","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/providers/{id}","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/providers/{id}","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/providers/{id}","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/providers/{id}","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/providers/{id}","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/providers/{id}","traceId":"request-id"}}}}}},"delete":{"operationId":"adminDeleteProviders","tags":["Admin"],"summary":"admin Delete Providers","description":"Requires admin permission providers.write. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"X-CSRF-Token","in":"header","required":false,"description":"Required for cookie-authenticated mutations; returned by sign-in/sign-up.","schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"ok":{"type":"boolean"}},"required":["ok"]},"example":{"ok":true}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/providers/{id}","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/providers/{id}","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/providers/{id}","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/providers/{id}","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/providers/{id}","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/providers/{id}","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/providers/{id}","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/providers/{id}","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/providers/{id}","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/providers/{id}","traceId":"request-id"}}}}}}},"/v1/admin/product-models":{"get":{"operationId":"adminListProductModels","tags":["Admin"],"summary":"admin List Product Models","description":"Requires admin permission models.read. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"cursor","in":"query","required":false,"schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"schema":{"default":25,"type":"integer","minimum":1,"maximum":100}},{"name":"q","in":"query","required":false,"schema":{"type":"string","maxLength":200}}],"security":[{"session":[]},{"apiKey":[]}],"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"items":{"type":"array","items":{"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)$"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"},"data":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}}},"required":["id","createdAt","updatedAt"],"additionalProperties":{}}},"nextCursor":{"type":["string","null"]}},"required":["items","nextCursor"]},"example":{"items":[{"id":"01990000-0000-7000-8000-000000000001","createdAt":"2026-09-19T12:00:00.000Z","updatedAt":"2026-09-19T12:00:00.000Z","data":{}}],"nextCursor":"example"}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/product-models","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/product-models","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/product-models","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/product-models","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/product-models","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/product-models","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/product-models","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/product-models","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/product-models","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/product-models","traceId":"request-id"}}}}}},"post":{"operationId":"adminCreateProductModels","tags":["Admin"],"summary":"admin Create Product Models","description":"Requires admin permission models.write. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"X-CSRF-Token","in":"header","required":false,"description":"Required for cookie-authenticated mutations; returned by sign-in/sign-up.","schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"slug":{"type":"string","minLength":1,"maxLength":100},"name":{"type":"object","properties":{"ar":{"type":"string","minLength":1},"en":{"type":"string","minLength":1}},"required":["ar","en"]},"description":{"type":"object","properties":{"ar":{"type":"string","minLength":1},"en":{"type":"string","minLength":1}},"required":["ar","en"]},"creditRate":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"languages":{"minItems":1,"type":"array","items":{"type":"string"}},"estimatedSeconds":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"data":{"default":{},"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}}},"required":["slug","name","description","creditRate","languages","estimatedSeconds"]},"example":{"slug":"example","name":{"ar":"مثال","en":"example"},"description":{"ar":"مثال","en":"example"},"creditRate":1,"languages":["example"],"estimatedSeconds":1,"data":{}}}}},"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","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)$"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"},"data":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}}},"required":["id","createdAt","updatedAt"],"additionalProperties":{}},"example":{"id":"01990000-0000-7000-8000-000000000001","createdAt":"2026-09-19T12:00:00.000Z","updatedAt":"2026-09-19T12:00:00.000Z","data":{}}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/product-models","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/product-models","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/product-models","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/product-models","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/product-models","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/product-models","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/product-models","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/product-models","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/product-models","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/product-models","traceId":"request-id"}}}}}}},"/v1/admin/product-models/{id}":{"patch":{"operationId":"adminUpdateProductModels","tags":["Admin"],"summary":"admin Update Product Models","description":"Requires admin permission models.write. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"X-CSRF-Token","in":"header","required":false,"description":"Required for cookie-authenticated mutations; returned by sign-in/sign-up.","schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"slug":{"type":"string","minLength":1,"maxLength":100},"name":{"type":"object","properties":{"ar":{"type":"string","minLength":1},"en":{"type":"string","minLength":1}},"required":["ar","en"]},"description":{"type":"object","properties":{"ar":{"type":"string","minLength":1},"en":{"type":"string","minLength":1}},"required":["ar","en"]},"creditRate":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"languages":{"minItems":1,"type":"array","items":{"type":"string"}},"estimatedSeconds":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"data":{"default":{},"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}}}},"example":{"slug":"example","name":{"ar":"مثال","en":"example"},"description":{"ar":"مثال","en":"example"},"creditRate":1,"languages":["example"],"estimatedSeconds":1,"data":{}}}}},"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","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)$"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"},"data":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}}},"required":["id","createdAt","updatedAt"],"additionalProperties":{}},"example":{"id":"01990000-0000-7000-8000-000000000001","createdAt":"2026-09-19T12:00:00.000Z","updatedAt":"2026-09-19T12:00:00.000Z","data":{}}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/product-models/{id}","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/product-models/{id}","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/product-models/{id}","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/product-models/{id}","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/product-models/{id}","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/product-models/{id}","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/product-models/{id}","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/product-models/{id}","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/product-models/{id}","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/product-models/{id}","traceId":"request-id"}}}}}},"delete":{"operationId":"adminDeleteProductModels","tags":["Admin"],"summary":"admin Delete Product Models","description":"Requires admin permission models.write. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"X-CSRF-Token","in":"header","required":false,"description":"Required for cookie-authenticated mutations; returned by sign-in/sign-up.","schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"ok":{"type":"boolean"}},"required":["ok"]},"example":{"ok":true}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/product-models/{id}","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/product-models/{id}","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/product-models/{id}","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/product-models/{id}","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/product-models/{id}","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/product-models/{id}","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/product-models/{id}","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/product-models/{id}","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/product-models/{id}","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/product-models/{id}","traceId":"request-id"}}}}}}},"/v1/admin/model-bindings":{"get":{"operationId":"adminListModelBindings","tags":["Admin"],"summary":"admin List Model Bindings","description":"Requires admin permission models.read. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"cursor","in":"query","required":false,"schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"schema":{"default":25,"type":"integer","minimum":1,"maximum":100}},{"name":"q","in":"query","required":false,"schema":{"type":"string","maxLength":200}}],"security":[{"session":[]},{"apiKey":[]}],"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"items":{"type":"array","items":{"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)$"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"},"data":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}}},"required":["id","createdAt","updatedAt"],"additionalProperties":{}}},"nextCursor":{"type":["string","null"]}},"required":["items","nextCursor"]},"example":{"items":[{"id":"01990000-0000-7000-8000-000000000001","createdAt":"2026-09-19T12:00:00.000Z","updatedAt":"2026-09-19T12:00:00.000Z","data":{}}],"nextCursor":"example"}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/model-bindings","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/model-bindings","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/model-bindings","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/model-bindings","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/model-bindings","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/model-bindings","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/model-bindings","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/model-bindings","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/model-bindings","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/model-bindings","traceId":"request-id"}}}}}},"post":{"operationId":"adminCreateModelBindings","tags":["Admin"],"summary":"admin Create Model Bindings","description":"Requires admin permission models.write. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"X-CSRF-Token","in":"header","required":false,"description":"Required for cookie-authenticated mutations; returned by sign-in/sign-up.","schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"capability":{"type":"string","enum":["tts","stt","convert","design","clone","music","sfx","enhance","text","realtime"]},"productModelId":{"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)$"},"provider":{"type":"string","minLength":1,"maxLength":50},"providerModel":{"type":"string","minLength":1,"maxLength":200},"locale":{"default":"*","type":"string"},"dialect":{"default":"*","type":"string"},"planTier":{"default":"*","type":"string"},"weight":{"default":100,"type":"integer","minimum":0,"maximum":10000},"enabled":{"default":true,"type":"boolean"},"priority":{"default":0,"type":"integer","minimum":0,"maximum":1000},"data":{"default":{},"type":"object","properties":{"region":{"type":"string"},"costPerUnitUsd":{"description":"Legacy flat USD price per unit; used only when no token or per-second price is set","anyOf":[{"type":"number","minimum":0},{"type":"null"}]},"unit":{"type":"string","enum":["characters","seconds","tokens","requests"]},"inputCostPerMTokUsd":{"description":"USD per million input tokens","anyOf":[{"type":"number","minimum":0},{"type":"null"}]},"outputCostPerMTokUsd":{"description":"USD per million output tokens (thinking and audio output included)","anyOf":[{"type":"number","minimum":0},{"type":"null"}]},"audioInputCostPerMTokUsd":{"description":"USD per million audio input tokens, when priced apart from text input","anyOf":[{"type":"number","minimum":0},{"type":"null"}]},"costPerSecondUsd":{"description":"USD per second of audio or video; prices the call alone when set","anyOf":[{"type":"number","minimum":0},{"type":"null"}]},"prices":{"description":"Dated price changes; each row overrides the fields it sets from its day on","anyOf":[{"maxItems":20,"type":"array","items":{"type":"object","properties":{"from":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$","description":"First day (UTC) the row applies"},"inputCostPerMTokUsd":{"description":"USD per million input tokens","anyOf":[{"type":"number","minimum":0},{"type":"null"}]},"outputCostPerMTokUsd":{"description":"USD per million output tokens (thinking and audio output included)","anyOf":[{"type":"number","minimum":0},{"type":"null"}]},"audioInputCostPerMTokUsd":{"description":"USD per million audio input tokens, when priced apart from text input","anyOf":[{"type":"number","minimum":0},{"type":"null"}]},"costPerSecondUsd":{"description":"USD per second of audio or video; prices the call alone when set","anyOf":[{"type":"number","minimum":0},{"type":"null"}]}},"required":["from"]}},{"type":"null"}]}}}},"required":["capability","productModelId","provider","providerModel"]},"example":{"capability":"tts","productModelId":"01990000-0000-7000-8000-000000000001","provider":"example","providerModel":"example","locale":"*","dialect":"*","planTier":"*","weight":100,"enabled":true,"priority":0,"data":{}}}}},"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","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)$"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"},"data":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}}},"required":["id","createdAt","updatedAt"],"additionalProperties":{}},"example":{"id":"01990000-0000-7000-8000-000000000001","createdAt":"2026-09-19T12:00:00.000Z","updatedAt":"2026-09-19T12:00:00.000Z","data":{}}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/model-bindings","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/model-bindings","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/model-bindings","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/model-bindings","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/model-bindings","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/model-bindings","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/model-bindings","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/model-bindings","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/model-bindings","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/model-bindings","traceId":"request-id"}}}}}}},"/v1/admin/model-bindings/{id}":{"patch":{"operationId":"adminUpdateModelBindings","tags":["Admin"],"summary":"admin Update Model Bindings","description":"Requires admin permission models.write. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"X-CSRF-Token","in":"header","required":false,"description":"Required for cookie-authenticated mutations; returned by sign-in/sign-up.","schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"capability":{"type":"string","enum":["tts","stt","convert","design","clone","music","sfx","enhance","text","realtime"]},"productModelId":{"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)$"},"provider":{"type":"string","minLength":1,"maxLength":50},"providerModel":{"type":"string","minLength":1,"maxLength":200},"locale":{"default":"*","type":"string"},"dialect":{"default":"*","type":"string"},"planTier":{"default":"*","type":"string"},"weight":{"default":100,"type":"integer","minimum":0,"maximum":10000},"enabled":{"default":true,"type":"boolean"},"priority":{"default":0,"type":"integer","minimum":0,"maximum":1000},"data":{"default":{},"type":"object","properties":{"region":{"type":"string"},"costPerUnitUsd":{"description":"Legacy flat USD price per unit; used only when no token or per-second price is set","anyOf":[{"type":"number","minimum":0},{"type":"null"}]},"unit":{"type":"string","enum":["characters","seconds","tokens","requests"]},"inputCostPerMTokUsd":{"description":"USD per million input tokens","anyOf":[{"type":"number","minimum":0},{"type":"null"}]},"outputCostPerMTokUsd":{"description":"USD per million output tokens (thinking and audio output included)","anyOf":[{"type":"number","minimum":0},{"type":"null"}]},"audioInputCostPerMTokUsd":{"description":"USD per million audio input tokens, when priced apart from text input","anyOf":[{"type":"number","minimum":0},{"type":"null"}]},"costPerSecondUsd":{"description":"USD per second of audio or video; prices the call alone when set","anyOf":[{"type":"number","minimum":0},{"type":"null"}]},"prices":{"description":"Dated price changes; each row overrides the fields it sets from its day on","anyOf":[{"maxItems":20,"type":"array","items":{"type":"object","properties":{"from":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$","description":"First day (UTC) the row applies"},"inputCostPerMTokUsd":{"description":"USD per million input tokens","anyOf":[{"type":"number","minimum":0},{"type":"null"}]},"outputCostPerMTokUsd":{"description":"USD per million output tokens (thinking and audio output included)","anyOf":[{"type":"number","minimum":0},{"type":"null"}]},"audioInputCostPerMTokUsd":{"description":"USD per million audio input tokens, when priced apart from text input","anyOf":[{"type":"number","minimum":0},{"type":"null"}]},"costPerSecondUsd":{"description":"USD per second of audio or video; prices the call alone when set","anyOf":[{"type":"number","minimum":0},{"type":"null"}]}},"required":["from"]}},{"type":"null"}]}}}}},"example":{"capability":"tts","productModelId":"01990000-0000-7000-8000-000000000001","provider":"example","providerModel":"example","locale":"*","dialect":"*","planTier":"*","weight":100,"enabled":true,"priority":0,"data":{}}}}},"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","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)$"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"},"data":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}}},"required":["id","createdAt","updatedAt"],"additionalProperties":{}},"example":{"id":"01990000-0000-7000-8000-000000000001","createdAt":"2026-09-19T12:00:00.000Z","updatedAt":"2026-09-19T12:00:00.000Z","data":{}}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/model-bindings/{id}","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/model-bindings/{id}","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/model-bindings/{id}","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/model-bindings/{id}","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/model-bindings/{id}","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/model-bindings/{id}","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/model-bindings/{id}","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/model-bindings/{id}","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/model-bindings/{id}","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/model-bindings/{id}","traceId":"request-id"}}}}}},"delete":{"operationId":"adminDeleteModelBindings","tags":["Admin"],"summary":"admin Delete Model Bindings","description":"Requires admin permission models.write. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"X-CSRF-Token","in":"header","required":false,"description":"Required for cookie-authenticated mutations; returned by sign-in/sign-up.","schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"ok":{"type":"boolean"}},"required":["ok"]},"example":{"ok":true}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/model-bindings/{id}","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/model-bindings/{id}","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/model-bindings/{id}","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/model-bindings/{id}","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/model-bindings/{id}","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/model-bindings/{id}","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/model-bindings/{id}","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/model-bindings/{id}","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/model-bindings/{id}","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/model-bindings/{id}","traceId":"request-id"}}}}}}},"/v1/admin/voices":{"get":{"operationId":"adminListVoices","tags":["Admin"],"summary":"admin List Voices","description":"Requires admin permission voices.read. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"cursor","in":"query","required":false,"schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"schema":{"default":25,"type":"integer","minimum":1,"maximum":100}},{"name":"q","in":"query","required":false,"schema":{"type":"string","maxLength":200}}],"security":[{"session":[]},{"apiKey":[]}],"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"items":{"type":"array","items":{"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)$"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"},"data":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}}},"required":["id","createdAt","updatedAt"],"additionalProperties":{}}},"nextCursor":{"type":["string","null"]}},"required":["items","nextCursor"]},"example":{"items":[{"id":"01990000-0000-7000-8000-000000000001","createdAt":"2026-09-19T12:00:00.000Z","updatedAt":"2026-09-19T12:00:00.000Z","data":{}}],"nextCursor":"example"}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/voices","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/voices","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/voices","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/voices","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/voices","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/voices","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/voices","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/voices","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/voices","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/voices","traceId":"request-id"}}}}}},"post":{"operationId":"adminCreateVoices","tags":["Admin"],"summary":"admin Create Voices","description":"Requires admin permission voices.write. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"X-CSRF-Token","in":"header","required":false,"description":"Required for cookie-authenticated mutations; returned by sign-in/sign-up.","schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"slug":{"type":"string","minLength":1,"maxLength":100},"name":{"type":"object","properties":{"ar":{"type":"string","minLength":1},"en":{"type":"string","minLength":1}},"required":["ar","en"]},"description":{"type":"object","properties":{"ar":{"type":"string","minLength":1},"en":{"type":"string","minLength":1}},"required":["ar","en"]},"language":{"type":"string","minLength":1,"maxLength":20},"dialect":{"type":"string","minLength":1,"maxLength":20},"accent":{"type":"string","minLength":1,"maxLength":50},"gender":{"type":"string","enum":["male","female","neutral"]},"age":{"type":"string","minLength":1,"maxLength":50},"category":{"type":"string","minLength":1,"maxLength":100},"tags":{"default":[],"type":"array","items":{"type":"string"}},"isPublic":{"default":true,"type":"boolean"},"trendingScore":{"default":0,"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"noticePeriod":{"default":0,"type":"integer","minimum":0,"maximum":9007199254740991},"premium":{"default":false,"description":"Premium: used only on plans with premiumVoices (paid plans); catalogue voices only","type":"boolean"},"data":{"default":{},"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}}},"required":["slug","name","description","language","dialect","accent","gender","age","category"]},"example":{"slug":"example","name":{"ar":"مثال","en":"example"},"description":{"ar":"مثال","en":"example"},"language":"ar","dialect":"ar-SA","accent":"example","gender":"male","age":"example","category":"example","tags":[],"isPublic":true,"trendingScore":0,"noticePeriod":0,"premium":false,"data":{}}}}},"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","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)$"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"},"data":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}}},"required":["id","createdAt","updatedAt"],"additionalProperties":{}},"example":{"id":"01990000-0000-7000-8000-000000000001","createdAt":"2026-09-19T12:00:00.000Z","updatedAt":"2026-09-19T12:00:00.000Z","data":{}}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/voices","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/voices","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/voices","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/voices","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/voices","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/voices","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/voices","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/voices","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/voices","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/voices","traceId":"request-id"}}}}}}},"/v1/admin/voices/{id}":{"patch":{"operationId":"adminUpdateVoices","tags":["Admin"],"summary":"admin Update Voices","description":"Requires admin permission voices.write. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"X-CSRF-Token","in":"header","required":false,"description":"Required for cookie-authenticated mutations; returned by sign-in/sign-up.","schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"slug":{"type":"string","minLength":1,"maxLength":100},"name":{"type":"object","properties":{"ar":{"type":"string","minLength":1},"en":{"type":"string","minLength":1}},"required":["ar","en"]},"description":{"type":"object","properties":{"ar":{"type":"string","minLength":1},"en":{"type":"string","minLength":1}},"required":["ar","en"]},"language":{"type":"string","minLength":1,"maxLength":20},"dialect":{"type":"string","minLength":1,"maxLength":20},"accent":{"type":"string","minLength":1,"maxLength":50},"gender":{"type":"string","enum":["male","female","neutral"]},"age":{"type":"string","minLength":1,"maxLength":50},"category":{"type":"string","minLength":1,"maxLength":100},"tags":{"default":[],"type":"array","items":{"type":"string"}},"isPublic":{"default":true,"type":"boolean"},"trendingScore":{"default":0,"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"noticePeriod":{"default":0,"type":"integer","minimum":0,"maximum":9007199254740991},"premium":{"default":false,"description":"Premium: used only on plans with premiumVoices (paid plans); catalogue voices only","type":"boolean"},"data":{"default":{},"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}}}},"example":{"slug":"example","name":{"ar":"مثال","en":"example"},"description":{"ar":"مثال","en":"example"},"language":"ar","dialect":"ar-SA","accent":"example","gender":"male","age":"example","category":"example","tags":[],"isPublic":true,"trendingScore":0,"noticePeriod":0,"premium":false,"data":{}}}}},"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","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)$"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"},"data":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}}},"required":["id","createdAt","updatedAt"],"additionalProperties":{}},"example":{"id":"01990000-0000-7000-8000-000000000001","createdAt":"2026-09-19T12:00:00.000Z","updatedAt":"2026-09-19T12:00:00.000Z","data":{}}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/voices/{id}","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/voices/{id}","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/voices/{id}","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/voices/{id}","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/voices/{id}","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/voices/{id}","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/voices/{id}","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/voices/{id}","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/voices/{id}","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/voices/{id}","traceId":"request-id"}}}}}},"delete":{"operationId":"adminDeleteVoices","tags":["Admin"],"summary":"admin Delete Voices","description":"Requires admin permission voices.write. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"X-CSRF-Token","in":"header","required":false,"description":"Required for cookie-authenticated mutations; returned by sign-in/sign-up.","schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"ok":{"type":"boolean"}},"required":["ok"]},"example":{"ok":true}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/voices/{id}","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/voices/{id}","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/voices/{id}","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/voices/{id}","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/voices/{id}","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/voices/{id}","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/voices/{id}","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/voices/{id}","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/voices/{id}","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/voices/{id}","traceId":"request-id"}}}}}}},"/v1/admin/voice-bindings":{"get":{"operationId":"adminListVoiceBindings","tags":["Admin"],"summary":"admin List Voice Bindings","description":"Requires admin permission voices.read. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"cursor","in":"query","required":false,"schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"schema":{"default":25,"type":"integer","minimum":1,"maximum":100}},{"name":"q","in":"query","required":false,"schema":{"type":"string","maxLength":200}}],"security":[{"session":[]},{"apiKey":[]}],"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"items":{"type":"array","items":{"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)$"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"},"data":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}}},"required":["id","createdAt","updatedAt"],"additionalProperties":{}}},"nextCursor":{"type":["string","null"]}},"required":["items","nextCursor"]},"example":{"items":[{"id":"01990000-0000-7000-8000-000000000001","createdAt":"2026-09-19T12:00:00.000Z","updatedAt":"2026-09-19T12:00:00.000Z","data":{}}],"nextCursor":"example"}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/voice-bindings","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/voice-bindings","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/voice-bindings","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/voice-bindings","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/voice-bindings","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/voice-bindings","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/voice-bindings","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/voice-bindings","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/voice-bindings","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/voice-bindings","traceId":"request-id"}}}}}},"post":{"operationId":"adminCreateVoiceBindings","tags":["Admin"],"summary":"admin Create Voice Bindings","description":"Requires admin permission voices.write. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"X-CSRF-Token","in":"header","required":false,"description":"Required for cookie-authenticated mutations; returned by sign-in/sign-up.","schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"voiceId":{"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)$"},"provider":{"type":"string","minLength":1,"maxLength":50},"providerVoice":{"type":"string","minLength":1,"maxLength":200},"data":{"default":{},"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}}},"required":["voiceId","provider","providerVoice"]},"example":{"voiceId":"01990000-0000-7000-8000-000000000001","provider":"example","providerVoice":"example","data":{}}}}},"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","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)$"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"},"data":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}}},"required":["id","createdAt","updatedAt"],"additionalProperties":{}},"example":{"id":"01990000-0000-7000-8000-000000000001","createdAt":"2026-09-19T12:00:00.000Z","updatedAt":"2026-09-19T12:00:00.000Z","data":{}}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/voice-bindings","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/voice-bindings","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/voice-bindings","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/voice-bindings","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/voice-bindings","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/voice-bindings","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/voice-bindings","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/voice-bindings","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/voice-bindings","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/voice-bindings","traceId":"request-id"}}}}}}},"/v1/admin/voice-bindings/{id}":{"patch":{"operationId":"adminUpdateVoiceBindings","tags":["Admin"],"summary":"admin Update Voice Bindings","description":"Requires admin permission voices.write. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"X-CSRF-Token","in":"header","required":false,"description":"Required for cookie-authenticated mutations; returned by sign-in/sign-up.","schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"voiceId":{"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)$"},"provider":{"type":"string","minLength":1,"maxLength":50},"providerVoice":{"type":"string","minLength":1,"maxLength":200},"data":{"default":{},"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}}}},"example":{"voiceId":"01990000-0000-7000-8000-000000000001","provider":"example","providerVoice":"example","data":{}}}}},"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","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)$"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"},"data":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}}},"required":["id","createdAt","updatedAt"],"additionalProperties":{}},"example":{"id":"01990000-0000-7000-8000-000000000001","createdAt":"2026-09-19T12:00:00.000Z","updatedAt":"2026-09-19T12:00:00.000Z","data":{}}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/voice-bindings/{id}","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/voice-bindings/{id}","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/voice-bindings/{id}","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/voice-bindings/{id}","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/voice-bindings/{id}","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/voice-bindings/{id}","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/voice-bindings/{id}","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/voice-bindings/{id}","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/voice-bindings/{id}","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/voice-bindings/{id}","traceId":"request-id"}}}}}},"delete":{"operationId":"adminDeleteVoiceBindings","tags":["Admin"],"summary":"admin Delete Voice Bindings","description":"Requires admin permission voices.write. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"X-CSRF-Token","in":"header","required":false,"description":"Required for cookie-authenticated mutations; returned by sign-in/sign-up.","schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"ok":{"type":"boolean"}},"required":["ok"]},"example":{"ok":true}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/voice-bindings/{id}","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/voice-bindings/{id}","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/voice-bindings/{id}","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/voice-bindings/{id}","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/voice-bindings/{id}","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/voice-bindings/{id}","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/voice-bindings/{id}","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/voice-bindings/{id}","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/voice-bindings/{id}","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/voice-bindings/{id}","traceId":"request-id"}}}}}}},"/v1/admin/categories":{"get":{"operationId":"adminListCategories","tags":["Admin"],"summary":"admin List Categories","description":"Requires admin permission voices.read. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"cursor","in":"query","required":false,"schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"schema":{"default":25,"type":"integer","minimum":1,"maximum":100}},{"name":"q","in":"query","required":false,"schema":{"type":"string","maxLength":200}}],"security":[{"session":[]},{"apiKey":[]}],"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"items":{"type":"array","items":{"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)$"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"},"data":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}}},"required":["id","createdAt","updatedAt"],"additionalProperties":{}}},"nextCursor":{"type":["string","null"]}},"required":["items","nextCursor"]},"example":{"items":[{"id":"01990000-0000-7000-8000-000000000001","createdAt":"2026-09-19T12:00:00.000Z","updatedAt":"2026-09-19T12:00:00.000Z","data":{}}],"nextCursor":"example"}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/categories","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/categories","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/categories","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/categories","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/categories","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/categories","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/categories","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/categories","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/categories","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/categories","traceId":"request-id"}}}}}},"post":{"operationId":"adminCreateCategories","tags":["Admin"],"summary":"admin Create Categories","description":"Requires admin permission voices.write. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"X-CSRF-Token","in":"header","required":false,"description":"Required for cookie-authenticated mutations; returned by sign-in/sign-up.","schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"name":{"type":"object","properties":{"ar":{"type":"string","minLength":1},"en":{"type":"string","minLength":1}},"required":["ar","en"]},"slug":{"type":"string","minLength":1,"maxLength":100}},"required":["name","slug"]},"example":{"name":{"ar":"مثال","en":"example"},"slug":"example"}}}},"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","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)$"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"},"data":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}}},"required":["id","createdAt","updatedAt"],"additionalProperties":{}},"example":{"id":"01990000-0000-7000-8000-000000000001","createdAt":"2026-09-19T12:00:00.000Z","updatedAt":"2026-09-19T12:00:00.000Z","data":{}}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/categories","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/categories","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/categories","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/categories","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/categories","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/categories","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/categories","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/categories","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/categories","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/categories","traceId":"request-id"}}}}}}},"/v1/admin/categories/{id}":{"patch":{"operationId":"adminUpdateCategories","tags":["Admin"],"summary":"admin Update Categories","description":"Requires admin permission voices.write. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"X-CSRF-Token","in":"header","required":false,"description":"Required for cookie-authenticated mutations; returned by sign-in/sign-up.","schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"name":{"type":"object","properties":{"ar":{"type":"string","minLength":1},"en":{"type":"string","minLength":1}},"required":["ar","en"]},"slug":{"type":"string","minLength":1,"maxLength":100}}},"example":{"name":{"ar":"مثال","en":"example"},"slug":"example"}}}},"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","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)$"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"},"data":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}}},"required":["id","createdAt","updatedAt"],"additionalProperties":{}},"example":{"id":"01990000-0000-7000-8000-000000000001","createdAt":"2026-09-19T12:00:00.000Z","updatedAt":"2026-09-19T12:00:00.000Z","data":{}}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/categories/{id}","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/categories/{id}","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/categories/{id}","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/categories/{id}","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/categories/{id}","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/categories/{id}","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/categories/{id}","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/categories/{id}","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/categories/{id}","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/categories/{id}","traceId":"request-id"}}}}}},"delete":{"operationId":"adminDeleteCategories","tags":["Admin"],"summary":"admin Delete Categories","description":"Requires admin permission voices.write. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"X-CSRF-Token","in":"header","required":false,"description":"Required for cookie-authenticated mutations; returned by sign-in/sign-up.","schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"ok":{"type":"boolean"}},"required":["ok"]},"example":{"ok":true}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/categories/{id}","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/categories/{id}","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/categories/{id}","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/categories/{id}","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/categories/{id}","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/categories/{id}","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/categories/{id}","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/categories/{id}","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/categories/{id}","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/categories/{id}","traceId":"request-id"}}}}}}},"/v1/admin/collections":{"get":{"operationId":"adminListCollections","tags":["Admin"],"summary":"admin List Collections","description":"Requires admin permission voices.read. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"cursor","in":"query","required":false,"schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"schema":{"default":25,"type":"integer","minimum":1,"maximum":100}},{"name":"q","in":"query","required":false,"schema":{"type":"string","maxLength":200}}],"security":[{"session":[]},{"apiKey":[]}],"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"items":{"type":"array","items":{"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)$"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"},"data":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}}},"required":["id","createdAt","updatedAt"],"additionalProperties":{}}},"nextCursor":{"type":["string","null"]}},"required":["items","nextCursor"]},"example":{"items":[{"id":"01990000-0000-7000-8000-000000000001","createdAt":"2026-09-19T12:00:00.000Z","updatedAt":"2026-09-19T12:00:00.000Z","data":{}}],"nextCursor":"example"}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/collections","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/collections","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/collections","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/collections","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/collections","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/collections","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/collections","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/collections","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/collections","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/collections","traceId":"request-id"}}}}}},"post":{"operationId":"adminCreateCollections","tags":["Admin"],"summary":"admin Create Collections","description":"Requires admin permission voices.write. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"X-CSRF-Token","in":"header","required":false,"description":"Required for cookie-authenticated mutations; returned by sign-in/sign-up.","schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"name":{"type":"object","properties":{"ar":{"type":"string","minLength":1},"en":{"type":"string","minLength":1}},"required":["ar","en"]},"description":{"type":"object","properties":{"ar":{"type":"string","minLength":1},"en":{"type":"string","minLength":1}},"required":["ar","en"]},"useCase":{"type":"string","minLength":1,"maxLength":100},"voiceIds":{"maxItems":1000,"type":"array","items":{"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)$"}}},"required":["name","useCase"]},"example":{"name":{"ar":"مثال","en":"example"},"description":{"ar":"مثال","en":"example"},"useCase":"example","voiceIds":["01990000-0000-7000-8000-000000000001"]}}}},"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","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)$"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"},"data":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}}},"required":["id","createdAt","updatedAt"],"additionalProperties":{}},"example":{"id":"01990000-0000-7000-8000-000000000001","createdAt":"2026-09-19T12:00:00.000Z","updatedAt":"2026-09-19T12:00:00.000Z","data":{}}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/collections","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/collections","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/collections","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/collections","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/collections","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/collections","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/collections","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/collections","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/collections","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/collections","traceId":"request-id"}}}}}}},"/v1/admin/collections/{id}":{"patch":{"operationId":"adminUpdateCollections","tags":["Admin"],"summary":"admin Update Collections","description":"Requires admin permission voices.write. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"X-CSRF-Token","in":"header","required":false,"description":"Required for cookie-authenticated mutations; returned by sign-in/sign-up.","schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"name":{"type":"object","properties":{"ar":{"type":"string","minLength":1},"en":{"type":"string","minLength":1}},"required":["ar","en"]},"description":{"type":"object","properties":{"ar":{"type":"string","minLength":1},"en":{"type":"string","minLength":1}},"required":["ar","en"]},"useCase":{"type":"string","minLength":1,"maxLength":100},"voiceIds":{"maxItems":1000,"type":"array","items":{"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)$"}}}},"example":{"name":{"ar":"مثال","en":"example"},"description":{"ar":"مثال","en":"example"},"useCase":"example","voiceIds":["01990000-0000-7000-8000-000000000001"]}}}},"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","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)$"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"},"data":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}}},"required":["id","createdAt","updatedAt"],"additionalProperties":{}},"example":{"id":"01990000-0000-7000-8000-000000000001","createdAt":"2026-09-19T12:00:00.000Z","updatedAt":"2026-09-19T12:00:00.000Z","data":{}}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/collections/{id}","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/collections/{id}","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/collections/{id}","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/collections/{id}","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/collections/{id}","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/collections/{id}","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/collections/{id}","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/collections/{id}","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/collections/{id}","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/collections/{id}","traceId":"request-id"}}}}}},"delete":{"operationId":"adminDeleteCollections","tags":["Admin"],"summary":"admin Delete Collections","description":"Requires admin permission voices.write. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"X-CSRF-Token","in":"header","required":false,"description":"Required for cookie-authenticated mutations; returned by sign-in/sign-up.","schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"ok":{"type":"boolean"}},"required":["ok"]},"example":{"ok":true}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/collections/{id}","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/collections/{id}","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/collections/{id}","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/collections/{id}","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/collections/{id}","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/collections/{id}","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/collections/{id}","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/collections/{id}","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/collections/{id}","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/collections/{id}","traceId":"request-id"}}}}}}},"/v1/admin/coupons":{"get":{"operationId":"adminListCoupons","tags":["Admin"],"summary":"admin List Coupons","description":"Requires admin permission billing.read. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"cursor","in":"query","required":false,"schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"schema":{"default":25,"type":"integer","minimum":1,"maximum":100}},{"name":"q","in":"query","required":false,"schema":{"type":"string","maxLength":200}}],"security":[{"session":[]},{"apiKey":[]}],"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"items":{"type":"array","items":{"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)$"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"},"data":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}}},"required":["id","createdAt","updatedAt"],"additionalProperties":{}}},"nextCursor":{"type":["string","null"]}},"required":["items","nextCursor"]},"example":{"items":[{"id":"01990000-0000-7000-8000-000000000001","createdAt":"2026-09-19T12:00:00.000Z","updatedAt":"2026-09-19T12:00:00.000Z","data":{}}],"nextCursor":"example"}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/coupons","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/coupons","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/coupons","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/coupons","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/coupons","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/coupons","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/coupons","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/coupons","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/coupons","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/coupons","traceId":"request-id"}}}}}},"post":{"operationId":"adminCreateCoupons","tags":["Admin"],"summary":"admin Create Coupons","description":"Requires admin permission billing.write. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"X-CSRF-Token","in":"header","required":false,"description":"Required for cookie-authenticated mutations; returned by sign-in/sign-up.","schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"code":{"type":"string","minLength":1,"maxLength":50},"percent":{"type":"number","minimum":0,"maximum":100},"enabled":{"type":"boolean"}},"required":["code","percent","enabled"]},"example":{"code":"example","percent":0,"enabled":true}}}},"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","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)$"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"},"data":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}}},"required":["id","createdAt","updatedAt"],"additionalProperties":{}},"example":{"id":"01990000-0000-7000-8000-000000000001","createdAt":"2026-09-19T12:00:00.000Z","updatedAt":"2026-09-19T12:00:00.000Z","data":{}}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/coupons","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/coupons","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/coupons","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/coupons","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/coupons","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/coupons","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/coupons","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/coupons","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/coupons","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/coupons","traceId":"request-id"}}}}}}},"/v1/admin/coupons/{id}":{"patch":{"operationId":"adminUpdateCoupons","tags":["Admin"],"summary":"admin Update Coupons","description":"Requires admin permission billing.write. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"X-CSRF-Token","in":"header","required":false,"description":"Required for cookie-authenticated mutations; returned by sign-in/sign-up.","schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"code":{"type":"string","minLength":1,"maxLength":50},"percent":{"type":"number","minimum":0,"maximum":100},"enabled":{"type":"boolean"}}},"example":{"code":"example","percent":0,"enabled":true}}}},"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","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)$"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"},"data":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}}},"required":["id","createdAt","updatedAt"],"additionalProperties":{}},"example":{"id":"01990000-0000-7000-8000-000000000001","createdAt":"2026-09-19T12:00:00.000Z","updatedAt":"2026-09-19T12:00:00.000Z","data":{}}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/coupons/{id}","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/coupons/{id}","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/coupons/{id}","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/coupons/{id}","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/coupons/{id}","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/coupons/{id}","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/coupons/{id}","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/coupons/{id}","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/coupons/{id}","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/coupons/{id}","traceId":"request-id"}}}}}},"delete":{"operationId":"adminDeleteCoupons","tags":["Admin"],"summary":"admin Delete Coupons","description":"Requires admin permission billing.write. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"X-CSRF-Token","in":"header","required":false,"description":"Required for cookie-authenticated mutations; returned by sign-in/sign-up.","schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"ok":{"type":"boolean"}},"required":["ok"]},"example":{"ok":true}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/coupons/{id}","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/coupons/{id}","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/coupons/{id}","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/coupons/{id}","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/coupons/{id}","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/coupons/{id}","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/coupons/{id}","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/coupons/{id}","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/coupons/{id}","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/coupons/{id}","traceId":"request-id"}}}}}}},"/v1/admin/content":{"get":{"operationId":"adminListContent","tags":["Admin"],"summary":"admin List Content","description":"Requires admin permission content.read. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"cursor","in":"query","required":false,"schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"schema":{"default":25,"type":"integer","minimum":1,"maximum":100}},{"name":"q","in":"query","required":false,"schema":{"type":"string","maxLength":200}}],"security":[{"session":[]},{"apiKey":[]}],"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"items":{"type":"array","items":{"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)$"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"},"data":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}}},"required":["id","createdAt","updatedAt"],"additionalProperties":{}}},"nextCursor":{"type":["string","null"]}},"required":["items","nextCursor"]},"example":{"items":[{"id":"01990000-0000-7000-8000-000000000001","createdAt":"2026-09-19T12:00:00.000Z","updatedAt":"2026-09-19T12:00:00.000Z","data":{}}],"nextCursor":"example"}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/content","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/content","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/content","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/content","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/content","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/content","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/content","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/content","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/content","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/content","traceId":"request-id"}}}}}},"post":{"operationId":"adminCreateContent","tags":["Admin"],"summary":"admin Create Content","description":"Requires admin permission content.write. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"X-CSRF-Token","in":"header","required":false,"description":"Required for cookie-authenticated mutations; returned by sign-in/sign-up.","schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"kind":{"type":"string","enum":["surprise","surprise-music","email-template","notification-template","onboarding","plan-features","golden-sentence"]},"name":{"type":"string","minLength":1,"maxLength":100},"text":{"type":"object","properties":{"ar":{"type":"string","minLength":1},"en":{"type":"string","minLength":1}},"required":["ar","en"]},"locale":{"type":"string"}},"required":["kind","name","text"]},"example":{"kind":"surprise","name":"Noura","text":{"ar":"مثال","en":"example"},"locale":"ar-SA"}}}},"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","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)$"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"},"data":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}}},"required":["id","createdAt","updatedAt"],"additionalProperties":{}},"example":{"id":"01990000-0000-7000-8000-000000000001","createdAt":"2026-09-19T12:00:00.000Z","updatedAt":"2026-09-19T12:00:00.000Z","data":{}}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/content","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/content","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/content","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/content","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/content","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/content","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/content","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/content","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/content","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/content","traceId":"request-id"}}}}}}},"/v1/admin/content/{id}":{"patch":{"operationId":"adminUpdateContent","tags":["Admin"],"summary":"admin Update Content","description":"Requires admin permission content.write. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"X-CSRF-Token","in":"header","required":false,"description":"Required for cookie-authenticated mutations; returned by sign-in/sign-up.","schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"kind":{"type":"string","enum":["surprise","surprise-music","email-template","notification-template","onboarding","plan-features","golden-sentence"]},"name":{"type":"string","minLength":1,"maxLength":100},"text":{"type":"object","properties":{"ar":{"type":"string","minLength":1},"en":{"type":"string","minLength":1}},"required":["ar","en"]},"locale":{"type":"string"}}},"example":{"kind":"surprise","name":"Noura","text":{"ar":"مثال","en":"example"},"locale":"ar-SA"}}}},"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","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)$"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"},"data":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}}},"required":["id","createdAt","updatedAt"],"additionalProperties":{}},"example":{"id":"01990000-0000-7000-8000-000000000001","createdAt":"2026-09-19T12:00:00.000Z","updatedAt":"2026-09-19T12:00:00.000Z","data":{}}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/content/{id}","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/content/{id}","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/content/{id}","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/content/{id}","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/content/{id}","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/content/{id}","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/content/{id}","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/content/{id}","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/content/{id}","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/content/{id}","traceId":"request-id"}}}}}},"delete":{"operationId":"adminDeleteContent","tags":["Admin"],"summary":"admin Delete Content","description":"Requires admin permission content.write. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"X-CSRF-Token","in":"header","required":false,"description":"Required for cookie-authenticated mutations; returned by sign-in/sign-up.","schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"ok":{"type":"boolean"}},"required":["ok"]},"example":{"ok":true}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/content/{id}","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/content/{id}","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/content/{id}","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/content/{id}","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/content/{id}","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/content/{id}","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/content/{id}","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/content/{id}","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/content/{id}","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/content/{id}","traceId":"request-id"}}}}}}},"/v1/admin/feature-flags":{"get":{"operationId":"adminListFeatureFlags","tags":["Admin"],"summary":"admin List Feature Flags","description":"Requires admin permission models.read. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"cursor","in":"query","required":false,"schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"schema":{"default":25,"type":"integer","minimum":1,"maximum":100}},{"name":"q","in":"query","required":false,"schema":{"type":"string","maxLength":200}}],"security":[{"session":[]},{"apiKey":[]}],"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"items":{"type":"array","items":{"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)$"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"},"data":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}}},"required":["id","createdAt","updatedAt"],"additionalProperties":{}}},"nextCursor":{"type":["string","null"]}},"required":["items","nextCursor"]},"example":{"items":[{"id":"01990000-0000-7000-8000-000000000001","createdAt":"2026-09-19T12:00:00.000Z","updatedAt":"2026-09-19T12:00:00.000Z","data":{}}],"nextCursor":"example"}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/feature-flags","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/feature-flags","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/feature-flags","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/feature-flags","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/feature-flags","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/feature-flags","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/feature-flags","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/feature-flags","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/feature-flags","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/feature-flags","traceId":"request-id"}}}}}},"post":{"operationId":"adminCreateFeatureFlags","tags":["Admin"],"summary":"admin Create Feature Flags","description":"Requires admin permission models.write. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"X-CSRF-Token","in":"header","required":false,"description":"Required for cookie-authenticated mutations; returned by sign-in/sign-up.","schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"key":{"type":"string","minLength":1,"maxLength":100},"enabled":{"type":"boolean"},"percentage":{"type":"number","minimum":0,"maximum":100},"plans":{"default":[],"type":"array","items":{"type":"string"}},"workspaces":{"default":[],"type":"array","items":{"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)$"}}},"required":["key","enabled","percentage"]},"example":{"key":"example","enabled":true,"percentage":0,"plans":[],"workspaces":[]}}}},"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","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)$"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"},"data":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}}},"required":["id","createdAt","updatedAt"],"additionalProperties":{}},"example":{"id":"01990000-0000-7000-8000-000000000001","createdAt":"2026-09-19T12:00:00.000Z","updatedAt":"2026-09-19T12:00:00.000Z","data":{}}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/feature-flags","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/feature-flags","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/feature-flags","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/feature-flags","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/feature-flags","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/feature-flags","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/feature-flags","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/feature-flags","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/feature-flags","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/feature-flags","traceId":"request-id"}}}}}}},"/v1/admin/feature-flags/{id}":{"patch":{"operationId":"adminUpdateFeatureFlags","tags":["Admin"],"summary":"admin Update Feature Flags","description":"Requires admin permission models.write. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"X-CSRF-Token","in":"header","required":false,"description":"Required for cookie-authenticated mutations; returned by sign-in/sign-up.","schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"key":{"type":"string","minLength":1,"maxLength":100},"enabled":{"type":"boolean"},"percentage":{"type":"number","minimum":0,"maximum":100},"plans":{"default":[],"type":"array","items":{"type":"string"}},"workspaces":{"default":[],"type":"array","items":{"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)$"}}}},"example":{"key":"example","enabled":true,"percentage":0,"plans":[],"workspaces":[]}}}},"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","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)$"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"},"data":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}}},"required":["id","createdAt","updatedAt"],"additionalProperties":{}},"example":{"id":"01990000-0000-7000-8000-000000000001","createdAt":"2026-09-19T12:00:00.000Z","updatedAt":"2026-09-19T12:00:00.000Z","data":{}}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/feature-flags/{id}","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/feature-flags/{id}","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/feature-flags/{id}","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/feature-flags/{id}","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/feature-flags/{id}","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/feature-flags/{id}","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/feature-flags/{id}","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/feature-flags/{id}","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/feature-flags/{id}","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/feature-flags/{id}","traceId":"request-id"}}}}}},"delete":{"operationId":"adminDeleteFeatureFlags","tags":["Admin"],"summary":"admin Delete Feature Flags","description":"Requires admin permission models.write. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"X-CSRF-Token","in":"header","required":false,"description":"Required for cookie-authenticated mutations; returned by sign-in/sign-up.","schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"ok":{"type":"boolean"}},"required":["ok"]},"example":{"ok":true}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/feature-flags/{id}","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/feature-flags/{id}","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/feature-flags/{id}","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/feature-flags/{id}","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/feature-flags/{id}","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/feature-flags/{id}","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/feature-flags/{id}","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/feature-flags/{id}","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/feature-flags/{id}","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/feature-flags/{id}","traceId":"request-id"}}}}}}},"/v1/admin/overview/history":{"get":{"operationId":"adminOverviewHistory","tags":["Admin"],"summary":"admin Overview History","description":"Requires admin permission overview.read. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"days","in":"query","required":false,"schema":{"default":30,"type":"integer","minimum":1,"maximum":90}}],"security":[{"session":[]},{"apiKey":[]}],"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"from":{"type":"string"},"to":{"type":"string"},"revenue":{"type":"array","items":{"type":"object","properties":{"day":{"type":"string"},"revenueUsd":{"type":"number"}},"required":["day","revenueUsd"]}},"costs":{"type":"array","items":{"type":"object","properties":{"day":{"type":"string"},"provider":{"type":"string"},"model":{"type":"string"},"costUsd":{"type":"number"}},"required":["day","provider","model","costUsd"]}},"traffic":{"type":"array","items":{"type":"object","properties":{"minute":{"type":"string"},"jobs":{"type":"number"},"failed":{"type":"number"},"errorRate":{"type":"number"}},"required":["minute","jobs","failed","errorRate"]}},"trafficWindowHours":{"type":"number"}},"required":["from","to","revenue","costs","traffic","trafficWindowHours"]},"example":{"from":"example","to":"example","revenue":[{"day":"example","revenueUsd":1}],"costs":[{"day":"example","provider":"example","model":"example","costUsd":1}],"traffic":[{"minute":"example","jobs":1,"failed":1,"errorRate":1}],"trafficWindowHours":1}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/overview/history","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/overview/history","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/overview/history","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/overview/history","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/overview/history","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/overview/history","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/overview/history","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/overview/history","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/overview/history","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/overview/history","traceId":"request-id"}}}}}}},"/v1/admin/users/{id}":{"get":{"operationId":"adminGetUser","tags":["Admin"],"summary":"admin Get User","description":"Requires admin permission users.read. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","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)$"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"},"data":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}},"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,}$"},"name":{"type":"string"},"username":{"type":["string","null"]},"locale":{"type":"string"},"role":{"type":"string"},"verified":{"type":"boolean"},"totpEnabled":{"type":"boolean"},"workspaceId":{"anyOf":[{"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)$"},{"type":"null"}]},"avatarUrl":{"type":["string","null"]},"onboardingCompletedAt":{"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"}]},"hasPassword":{"description":"Whether the account has a password; Google / Apple-only accounts confirm sensitive actions (deleting the account) by typing their email instead","type":"boolean"},"country":{"description":"Effective country (billing, else latest detection, else sign-up, else this request): decides which country-restricted languages (Persian, Chinese) the app offers","type":["string","null"]}},"required":["id","createdAt","updatedAt","email","name","username","locale","role","verified","totpEnabled","onboardingCompletedAt"],"additionalProperties":{}},"example":{"id":"01990000-0000-7000-8000-000000000001","createdAt":"2026-09-19T12:00:00.000Z","updatedAt":"2026-09-19T12:00:00.000Z","data":{},"email":"demo@vocla.ai","name":"Noura","username":"fred_will","locale":"ar-SA","role":"example","verified":true,"totpEnabled":true,"workspaceId":"01990000-0000-7000-8000-000000000001","avatarUrl":"http://localhost:4000/example","onboardingCompletedAt":"2026-09-19T12:00:00.000Z","hasPassword":true,"country":"example"}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/users/{id}","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/users/{id}","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/users/{id}","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/users/{id}","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/users/{id}","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/users/{id}","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/users/{id}","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/users/{id}","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/users/{id}","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/users/{id}","traceId":"request-id"}}}}}},"patch":{"operationId":"adminUpdateUser","tags":["Admin"],"summary":"admin Update User","description":"Requires admin permission users.write. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"X-CSRF-Token","in":"header","required":false,"description":"Required for cookie-authenticated mutations; returned by sign-in/sign-up.","schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"suspended":{"type":"boolean"},"role":{"type":"string","enum":["user","super_admin","ops","support","finance","content"]},"reason":{"type":"string","minLength":1,"maxLength":1000}}},"example":{"suspended":true,"role":"user","reason":"example"}}}},"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","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)$"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"},"data":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}},"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,}$"},"name":{"type":"string"},"username":{"type":["string","null"]},"locale":{"type":"string"},"role":{"type":"string"},"verified":{"type":"boolean"},"totpEnabled":{"type":"boolean"},"workspaceId":{"anyOf":[{"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)$"},{"type":"null"}]},"avatarUrl":{"type":["string","null"]},"onboardingCompletedAt":{"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"}]},"hasPassword":{"description":"Whether the account has a password; Google / Apple-only accounts confirm sensitive actions (deleting the account) by typing their email instead","type":"boolean"},"country":{"description":"Effective country (billing, else latest detection, else sign-up, else this request): decides which country-restricted languages (Persian, Chinese) the app offers","type":["string","null"]}},"required":["id","createdAt","updatedAt","email","name","username","locale","role","verified","totpEnabled","onboardingCompletedAt"],"additionalProperties":{}},"example":{"id":"01990000-0000-7000-8000-000000000001","createdAt":"2026-09-19T12:00:00.000Z","updatedAt":"2026-09-19T12:00:00.000Z","data":{},"email":"demo@vocla.ai","name":"Noura","username":"fred_will","locale":"ar-SA","role":"example","verified":true,"totpEnabled":true,"workspaceId":"01990000-0000-7000-8000-000000000001","avatarUrl":"http://localhost:4000/example","onboardingCompletedAt":"2026-09-19T12:00:00.000Z","hasPassword":true,"country":"example"}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/users/{id}","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/users/{id}","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/users/{id}","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/users/{id}","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/users/{id}","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/users/{id}","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/users/{id}","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/users/{id}","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/users/{id}","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/users/{id}","traceId":"request-id"}}}}}}},"/v1/admin/users/{id}/sessions":{"get":{"operationId":"adminUserSessions","tags":["Admin"],"summary":"admin User Sessions","description":"Requires admin permission users.read. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"items":{"type":"array","items":{"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)$"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"},"data":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}}},"required":["id","createdAt","updatedAt"],"additionalProperties":{}}},"nextCursor":{"type":["string","null"]}},"required":["items","nextCursor"]},"example":{"items":[{"id":"01990000-0000-7000-8000-000000000001","createdAt":"2026-09-19T12:00:00.000Z","updatedAt":"2026-09-19T12:00:00.000Z","data":{}}],"nextCursor":"example"}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/users/{id}/sessions","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/users/{id}/sessions","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/users/{id}/sessions","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/users/{id}/sessions","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/users/{id}/sessions","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/users/{id}/sessions","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/users/{id}/sessions","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/users/{id}/sessions","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/users/{id}/sessions","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/users/{id}/sessions","traceId":"request-id"}}}}}}},"/v1/admin/users/{id}/memberships":{"get":{"operationId":"adminUserMemberships","tags":["Admin"],"summary":"admin User Memberships","description":"Requires admin permission users.read. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"items":{"type":"array","items":{"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)$"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"},"data":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}}},"required":["id","createdAt","updatedAt"],"additionalProperties":{}}},"nextCursor":{"type":["string","null"]}},"required":["items","nextCursor"]},"example":{"items":[{"id":"01990000-0000-7000-8000-000000000001","createdAt":"2026-09-19T12:00:00.000Z","updatedAt":"2026-09-19T12:00:00.000Z","data":{}}],"nextCursor":"example"}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/users/{id}/memberships","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/users/{id}/memberships","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/users/{id}/memberships","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/users/{id}/memberships","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/users/{id}/memberships","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/users/{id}/memberships","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/users/{id}/memberships","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/users/{id}/memberships","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/users/{id}/memberships","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/users/{id}/memberships","traceId":"request-id"}}}}}}},"/v1/admin/support":{"get":{"operationId":"adminListSupport","tags":["Admin"],"summary":"admin List Support","description":"Requires admin permission support.read. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"cursor","in":"query","required":false,"schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"schema":{"default":25,"type":"integer","minimum":1,"maximum":100}},{"name":"q","in":"query","required":false,"schema":{"type":"string","maxLength":200}},{"name":"status","in":"query","required":false,"schema":{"type":"string","enum":["open","in-progress","resolved","closed"]}},{"name":"assigneeId","in":"query","required":false,"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)$"}},{"name":"source","in":"query","required":false,"schema":{"type":"string","enum":["landing","app"]}},{"name":"topic","in":"query","required":false,"schema":{"type":"string","maxLength":50}}],"security":[{"session":[]},{"apiKey":[]}],"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"items":{"type":"array","items":{"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)$"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"},"data":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}}},"required":["id","createdAt","updatedAt"],"additionalProperties":{}}},"nextCursor":{"type":["string","null"]}},"required":["items","nextCursor"]},"example":{"items":[{"id":"01990000-0000-7000-8000-000000000001","createdAt":"2026-09-19T12:00:00.000Z","updatedAt":"2026-09-19T12:00:00.000Z","data":{}}],"nextCursor":"example"}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/support","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/support","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/support","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/support","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/support","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/support","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/support","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/support","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/support","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/support","traceId":"request-id"}}}}}}},"/v1/admin/support/{id}":{"get":{"operationId":"adminGetSupport","tags":["Admin"],"summary":"A ticket with its whole conversation; opening it clears \"customer replied\"","description":"Requires admin permission support.read. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"ticket":{"type":"object","properties":{"id":{"type":"string"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"},"topic":{"type":"string"},"status":{"type":"string"},"source":{"type":"string"},"lastMessageAt":{"type":"string"},"lastMessageBy":{"type":"string","enum":["customer","staff"]},"customerUnread":{"type":"boolean"},"staffUnread":{"type":"boolean"},"userId":{"type":["string","null"]},"workspaceId":{"type":["string","null"]},"email":{"type":["string","null"]},"name":{"type":["string","null"]}},"required":["id","createdAt","updatedAt","topic","status","source","lastMessageAt","lastMessageBy","customerUnread","staffUnread"]},"messages":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"author":{"type":"string","enum":["customer","staff"]},"body":{"type":"string"},"createdAt":{"type":"string"},"authorName":{"description":"Staff: first name for customers, full name for staff","type":["string","null"]}},"required":["id","author","body","createdAt","authorName"]},"description":"The ticket's own message first, then every reply, oldest first"}},"required":["ticket","messages"]},"example":{"ticket":{"id":"example","createdAt":"2026-09-19T12:00:00.000Z","updatedAt":"2026-09-19T12:00:00.000Z","topic":"example","status":"example","source":"example","lastMessageAt":"2026-09-19T12:00:00.000Z","lastMessageBy":"customer","customerUnread":true,"staffUnread":true,"userId":"example","workspaceId":"example","email":"example","name":"Noura"},"messages":[{"id":"example","author":"customer","body":"example","createdAt":"2026-09-19T12:00:00.000Z","authorName":"example"}]}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/support/{id}","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/support/{id}","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/support/{id}","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/support/{id}","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/support/{id}","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/support/{id}","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/support/{id}","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/support/{id}","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/support/{id}","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/support/{id}","traceId":"request-id"}}}}}},"patch":{"operationId":"adminUpdateSupport","tags":["Admin"],"summary":"admin Update Support","description":"Requires admin permission support.write. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"X-CSRF-Token","in":"header","required":false,"description":"Required for cookie-authenticated mutations; returned by sign-in/sign-up.","schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"status":{"type":"string","enum":["open","in-progress","resolved","closed"]},"assigneeId":{"anyOf":[{"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)$"},{"type":"null"}]},"internalNote":{"type":"string","maxLength":5000}}},"example":{"status":"open","assigneeId":"01990000-0000-7000-8000-000000000001","internalNote":"example"}}}},"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","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)$"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"},"data":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}}},"required":["id","createdAt","updatedAt"],"additionalProperties":{}},"example":{"id":"01990000-0000-7000-8000-000000000001","createdAt":"2026-09-19T12:00:00.000Z","updatedAt":"2026-09-19T12:00:00.000Z","data":{}}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/support/{id}","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/support/{id}","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/support/{id}","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/support/{id}","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/support/{id}","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/support/{id}","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/support/{id}","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/support/{id}","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/support/{id}","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/support/{id}","traceId":"request-id"}}}}}}},"/v1/admin/support/{id}/messages":{"post":{"operationId":"adminReplySupport","tags":["Admin"],"summary":"Staff reply: the customer gets an in-app notification and an email with a link to the ticket; audited","description":"Requires admin permission support.write. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"X-CSRF-Token","in":"header","required":false,"description":"Required for cookie-authenticated mutations; returned by sign-in/sign-up.","schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"message":{"type":"string","minLength":1,"maxLength":5000},"status":{"description":"Status after the reply (default: an open ticket becomes in-progress, others keep theirs)","type":"string","enum":["open","in-progress","resolved","closed"]}},"required":["message"]},"example":{"message":"example","status":"open"}}}},"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"ticket":{"type":"object","properties":{"id":{"type":"string"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"},"topic":{"type":"string"},"status":{"type":"string"},"source":{"type":"string"},"lastMessageAt":{"type":"string"},"lastMessageBy":{"type":"string","enum":["customer","staff"]},"customerUnread":{"type":"boolean"},"staffUnread":{"type":"boolean"},"userId":{"type":["string","null"]},"workspaceId":{"type":["string","null"]},"email":{"type":["string","null"]},"name":{"type":["string","null"]}},"required":["id","createdAt","updatedAt","topic","status","source","lastMessageAt","lastMessageBy","customerUnread","staffUnread"]},"messages":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"author":{"type":"string","enum":["customer","staff"]},"body":{"type":"string"},"createdAt":{"type":"string"},"authorName":{"description":"Staff: first name for customers, full name for staff","type":["string","null"]}},"required":["id","author","body","createdAt","authorName"]},"description":"The ticket's own message first, then every reply, oldest first"}},"required":["ticket","messages"]},"example":{"ticket":{"id":"example","createdAt":"2026-09-19T12:00:00.000Z","updatedAt":"2026-09-19T12:00:00.000Z","topic":"example","status":"example","source":"example","lastMessageAt":"2026-09-19T12:00:00.000Z","lastMessageBy":"customer","customerUnread":true,"staffUnread":true,"userId":"example","workspaceId":"example","email":"example","name":"Noura"},"messages":[{"id":"example","author":"customer","body":"example","createdAt":"2026-09-19T12:00:00.000Z","authorName":"example"}]}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/support/{id}/messages","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/support/{id}/messages","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/support/{id}/messages","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/support/{id}/messages","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/support/{id}/messages","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/support/{id}/messages","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/support/{id}/messages","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/support/{id}/messages","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/support/{id}/messages","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/support/{id}/messages","traceId":"request-id"}}}}}}},"/v1/admin/waitlist":{"get":{"operationId":"adminListWaitlist","tags":["Admin"],"summary":"admin List Waitlist","description":"Requires admin permission waitlist.read. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"cursor","in":"query","required":false,"schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"schema":{"default":25,"type":"integer","minimum":1,"maximum":100}},{"name":"q","in":"query","required":false,"schema":{"type":"string","maxLength":200}},{"name":"feature","in":"query","required":false,"schema":{"type":"string","enum":["dubbing","commercial"]}}],"security":[{"session":[]},{"apiKey":[]}],"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"items":{"type":"array","items":{"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)$"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"},"data":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}}},"required":["id","createdAt","updatedAt"],"additionalProperties":{}}},"nextCursor":{"type":["string","null"]}},"required":["items","nextCursor"]},"example":{"items":[{"id":"01990000-0000-7000-8000-000000000001","createdAt":"2026-09-19T12:00:00.000Z","updatedAt":"2026-09-19T12:00:00.000Z","data":{}}],"nextCursor":"example"}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/waitlist","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/waitlist","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/waitlist","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/waitlist","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/waitlist","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/waitlist","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/waitlist","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/waitlist","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/waitlist","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/waitlist","traceId":"request-id"}}}}}}},"/v1/admin/quality/runs/{id}":{"get":{"operationId":"adminQualityRun","tags":["Admin"],"summary":"admin Quality Run","description":"Requires admin permission quality.read. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","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)$"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"},"data":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}}},"required":["id","createdAt","updatedAt"],"additionalProperties":{}},"example":{"id":"01990000-0000-7000-8000-000000000001","createdAt":"2026-09-19T12:00:00.000Z","updatedAt":"2026-09-19T12:00:00.000Z","data":{}}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/quality/runs/{id}","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/quality/runs/{id}","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/quality/runs/{id}","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/quality/runs/{id}","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/quality/runs/{id}","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/quality/runs/{id}","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/quality/runs/{id}","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/quality/runs/{id}","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/quality/runs/{id}","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/quality/runs/{id}","traceId":"request-id"}}}}}}},"/v1/admin/quality/runs/{id}/ratings":{"get":{"operationId":"adminQualityRatings","tags":["Admin"],"summary":"admin Quality Ratings","description":"Requires admin permission quality.read. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"items":{"type":"array","items":{"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)$"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"},"data":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}}},"required":["id","createdAt","updatedAt"],"additionalProperties":{}}},"nextCursor":{"type":["string","null"]}},"required":["items","nextCursor"]},"example":{"items":[{"id":"01990000-0000-7000-8000-000000000001","createdAt":"2026-09-19T12:00:00.000Z","updatedAt":"2026-09-19T12:00:00.000Z","data":{}}],"nextCursor":"example"}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/quality/runs/{id}/ratings","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/quality/runs/{id}/ratings","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/quality/runs/{id}/ratings","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/quality/runs/{id}/ratings","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/quality/runs/{id}/ratings","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/quality/runs/{id}/ratings","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/quality/runs/{id}/ratings","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/quality/runs/{id}/ratings","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/quality/runs/{id}/ratings","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/quality/runs/{id}/ratings","traceId":"request-id"}}}}}},"post":{"operationId":"adminRateQuality","tags":["Admin"],"summary":"admin Rate Quality","description":"Requires admin permission quality.write. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"X-CSRF-Token","in":"header","required":false,"description":"Required for cookie-authenticated mutations; returned by sign-in/sign-up.","schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"sampleId":{"type":"string","minLength":1,"maxLength":200},"mos":{"type":"number","minimum":1,"maximum":5},"dialectScore":{"type":"number","minimum":1,"maximum":5},"notes":{"type":"string","maxLength":2000}},"required":["sampleId","mos","dialectScore"]},"example":{"sampleId":"example","mos":1,"dialectScore":1,"notes":"example"}}}},"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","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)$"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"},"data":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}}},"required":["id","createdAt","updatedAt"],"additionalProperties":{}},"example":{"id":"01990000-0000-7000-8000-000000000001","createdAt":"2026-09-19T12:00:00.000Z","updatedAt":"2026-09-19T12:00:00.000Z","data":{}}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/quality/runs/{id}/ratings","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/quality/runs/{id}/ratings","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/quality/runs/{id}/ratings","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/quality/runs/{id}/ratings","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/quality/runs/{id}/ratings","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/quality/runs/{id}/ratings","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/quality/runs/{id}/ratings","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/quality/runs/{id}/ratings","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/quality/runs/{id}/ratings","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/quality/runs/{id}/ratings","traceId":"request-id"}}}}}}},"/v1/admin/overview":{"get":{"operationId":"adminOverview","tags":["Admin"],"summary":"admin Overview","description":"Requires admin permission overview.read. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false}],"security":[{"session":[]},{"apiKey":[]}],"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","propertyNames":{"type":"string"},"additionalProperties":{}},"example":{}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/overview","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/overview","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/overview","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/overview","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/overview","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/overview","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/overview","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/overview","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/overview","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/overview","traceId":"request-id"}}}}}}},"/v1/admin/users":{"get":{"operationId":"adminListUsers","tags":["Admin"],"summary":"admin List Users","description":"Requires admin permission users.read. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"cursor","in":"query","required":false,"schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"schema":{"default":25,"type":"integer","minimum":1,"maximum":100}},{"name":"q","in":"query","required":false,"schema":{"type":"string","maxLength":200}},{"name":"role","in":"query","required":false,"schema":{"type":"string","enum":["user","super_admin","ops","support","finance","content"]}},{"name":"status","in":"query","required":false,"schema":{"type":"string","maxLength":50}},{"name":"ownerId","in":"query","required":false,"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)$"}},{"name":"planId","in":"query","required":false,"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)$"}},{"name":"country","in":"query","required":false,"schema":{"description":"Users: effective country (billing, else last detected, else sign-up); workspaces: billing country, else the owner country","type":"string","pattern":"^(?:[A-Z]{2}|unknown)(?:,(?:[A-Z]{2}|unknown)){0,49}$"}}],"security":[{"session":[]},{"apiKey":[]}],"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"items":{"type":"array","items":{"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)$"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"},"data":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}}},"required":["id","createdAt","updatedAt"],"additionalProperties":{}}},"nextCursor":{"type":["string","null"]}},"required":["items","nextCursor"]},"example":{"items":[{"id":"01990000-0000-7000-8000-000000000001","createdAt":"2026-09-19T12:00:00.000Z","updatedAt":"2026-09-19T12:00:00.000Z","data":{}}],"nextCursor":"example"}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/users","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/users","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/users","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/users","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/users","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/users","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/users","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/users","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/users","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/users","traceId":"request-id"}}}}}}},"/v1/admin/workspaces":{"get":{"operationId":"adminListWorkspaces","tags":["Admin"],"summary":"admin List Workspaces","description":"Requires admin permission workspaces.read. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"cursor","in":"query","required":false,"schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"schema":{"default":25,"type":"integer","minimum":1,"maximum":100}},{"name":"q","in":"query","required":false,"schema":{"type":"string","maxLength":200}},{"name":"role","in":"query","required":false,"schema":{"type":"string","enum":["user","super_admin","ops","support","finance","content"]}},{"name":"status","in":"query","required":false,"schema":{"type":"string","maxLength":50}},{"name":"ownerId","in":"query","required":false,"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)$"}},{"name":"planId","in":"query","required":false,"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)$"}},{"name":"country","in":"query","required":false,"schema":{"description":"Users: effective country (billing, else last detected, else sign-up); workspaces: billing country, else the owner country","type":"string","pattern":"^(?:[A-Z]{2}|unknown)(?:,(?:[A-Z]{2}|unknown)){0,49}$"}}],"security":[{"session":[]},{"apiKey":[]}],"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"items":{"type":"array","items":{"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)$"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"},"data":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}}},"required":["id","createdAt","updatedAt"],"additionalProperties":{}}},"nextCursor":{"type":["string","null"]}},"required":["items","nextCursor"]},"example":{"items":[{"id":"01990000-0000-7000-8000-000000000001","createdAt":"2026-09-19T12:00:00.000Z","updatedAt":"2026-09-19T12:00:00.000Z","data":{}}],"nextCursor":"example"}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/workspaces","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/workspaces","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/workspaces","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/workspaces","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/workspaces","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/workspaces","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/workspaces","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/workspaces","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/workspaces","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/workspaces","traceId":"request-id"}}}}}}},"/v1/admin/subscriptions":{"get":{"operationId":"adminListSubscriptions","tags":["Admin"],"summary":"admin List Subscriptions","description":"Requires admin permission billing.read. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"cursor","in":"query","required":false,"schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"schema":{"default":25,"type":"integer","minimum":1,"maximum":100}},{"name":"q","in":"query","required":false,"schema":{"type":"string","maxLength":200}},{"name":"role","in":"query","required":false,"schema":{"type":"string","enum":["user","super_admin","ops","support","finance","content"]}},{"name":"status","in":"query","required":false,"schema":{"type":"string","maxLength":50}},{"name":"ownerId","in":"query","required":false,"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)$"}},{"name":"planId","in":"query","required":false,"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)$"}},{"name":"country","in":"query","required":false,"schema":{"description":"Users: effective country (billing, else last detected, else sign-up); workspaces: billing country, else the owner country","type":"string","pattern":"^(?:[A-Z]{2}|unknown)(?:,(?:[A-Z]{2}|unknown)){0,49}$"}}],"security":[{"session":[]},{"apiKey":[]}],"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"items":{"type":"array","items":{"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)$"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"},"data":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}}},"required":["id","createdAt","updatedAt"],"additionalProperties":{}}},"nextCursor":{"type":["string","null"]}},"required":["items","nextCursor"]},"example":{"items":[{"id":"01990000-0000-7000-8000-000000000001","createdAt":"2026-09-19T12:00:00.000Z","updatedAt":"2026-09-19T12:00:00.000Z","data":{}}],"nextCursor":"example"}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/subscriptions","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/subscriptions","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/subscriptions","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/subscriptions","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/subscriptions","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/subscriptions","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/subscriptions","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/subscriptions","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/subscriptions","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/subscriptions","traceId":"request-id"}}}}}}},"/v1/admin/invoices":{"get":{"operationId":"adminListInvoices","tags":["Admin"],"summary":"admin List Invoices","description":"Requires admin permission billing.read. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"cursor","in":"query","required":false,"schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"schema":{"default":25,"type":"integer","minimum":1,"maximum":100}},{"name":"q","in":"query","required":false,"schema":{"type":"string","maxLength":200}},{"name":"role","in":"query","required":false,"schema":{"type":"string","enum":["user","super_admin","ops","support","finance","content"]}},{"name":"status","in":"query","required":false,"schema":{"type":"string","maxLength":50}},{"name":"ownerId","in":"query","required":false,"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)$"}},{"name":"planId","in":"query","required":false,"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)$"}},{"name":"country","in":"query","required":false,"schema":{"description":"Users: effective country (billing, else last detected, else sign-up); workspaces: billing country, else the owner country","type":"string","pattern":"^(?:[A-Z]{2}|unknown)(?:,(?:[A-Z]{2}|unknown)){0,49}$"}}],"security":[{"session":[]},{"apiKey":[]}],"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"items":{"type":"array","items":{"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)$"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"},"data":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}}},"required":["id","createdAt","updatedAt"],"additionalProperties":{}}},"nextCursor":{"type":["string","null"]}},"required":["items","nextCursor"]},"example":{"items":[{"id":"01990000-0000-7000-8000-000000000001","createdAt":"2026-09-19T12:00:00.000Z","updatedAt":"2026-09-19T12:00:00.000Z","data":{}}],"nextCursor":"example"}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/invoices","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/invoices","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/invoices","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/invoices","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/invoices","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/invoices","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/invoices","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/invoices","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/invoices","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/invoices","traceId":"request-id"}}}}}}},"/v1/admin/affiliates":{"get":{"operationId":"adminListAffiliates","tags":["Admin"],"summary":"admin List Affiliates","description":"Requires admin permission affiliates.read. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"cursor","in":"query","required":false,"schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"schema":{"default":25,"type":"integer","minimum":1,"maximum":100}},{"name":"q","in":"query","required":false,"schema":{"type":"string","maxLength":200}},{"name":"role","in":"query","required":false,"schema":{"type":"string","enum":["user","super_admin","ops","support","finance","content"]}},{"name":"status","in":"query","required":false,"schema":{"type":"string","maxLength":50}},{"name":"ownerId","in":"query","required":false,"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)$"}},{"name":"planId","in":"query","required":false,"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)$"}},{"name":"country","in":"query","required":false,"schema":{"description":"Users: effective country (billing, else last detected, else sign-up); workspaces: billing country, else the owner country","type":"string","pattern":"^(?:[A-Z]{2}|unknown)(?:,(?:[A-Z]{2}|unknown)){0,49}$"}}],"security":[{"session":[]},{"apiKey":[]}],"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"items":{"type":"array","items":{"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)$"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"},"data":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}}},"required":["id","createdAt","updatedAt"],"additionalProperties":{}}},"nextCursor":{"type":["string","null"]}},"required":["items","nextCursor"]},"example":{"items":[{"id":"01990000-0000-7000-8000-000000000001","createdAt":"2026-09-19T12:00:00.000Z","updatedAt":"2026-09-19T12:00:00.000Z","data":{}}],"nextCursor":"example"}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/affiliates","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/affiliates","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/affiliates","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/affiliates","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/affiliates","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/affiliates","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/affiliates","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/affiliates","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/affiliates","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/affiliates","traceId":"request-id"}}}}}}},"/v1/admin/payouts":{"get":{"operationId":"adminListPayouts","tags":["Admin"],"summary":"admin List Payouts","description":"Requires admin permission affiliates.read. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"cursor","in":"query","required":false,"schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"schema":{"default":25,"type":"integer","minimum":1,"maximum":100}},{"name":"q","in":"query","required":false,"schema":{"type":"string","maxLength":200}},{"name":"role","in":"query","required":false,"schema":{"type":"string","enum":["user","super_admin","ops","support","finance","content"]}},{"name":"status","in":"query","required":false,"schema":{"type":"string","maxLength":50}},{"name":"ownerId","in":"query","required":false,"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)$"}},{"name":"planId","in":"query","required":false,"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)$"}},{"name":"country","in":"query","required":false,"schema":{"description":"Users: effective country (billing, else last detected, else sign-up); workspaces: billing country, else the owner country","type":"string","pattern":"^(?:[A-Z]{2}|unknown)(?:,(?:[A-Z]{2}|unknown)){0,49}$"}}],"security":[{"session":[]},{"apiKey":[]}],"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"items":{"type":"array","items":{"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)$"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"},"data":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}}},"required":["id","createdAt","updatedAt"],"additionalProperties":{}}},"nextCursor":{"type":["string","null"]}},"required":["items","nextCursor"]},"example":{"items":[{"id":"01990000-0000-7000-8000-000000000001","createdAt":"2026-09-19T12:00:00.000Z","updatedAt":"2026-09-19T12:00:00.000Z","data":{}}],"nextCursor":"example"}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/payouts","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/payouts","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/payouts","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/payouts","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/payouts","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/payouts","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/payouts","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/payouts","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/payouts","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/payouts","traceId":"request-id"}}}}}}},"/v1/admin/moderation":{"get":{"operationId":"adminListModeration","tags":["Admin"],"summary":"admin List Moderation","description":"Requires admin permission moderation.read. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"cursor","in":"query","required":false,"schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"schema":{"default":25,"type":"integer","minimum":1,"maximum":100}},{"name":"q","in":"query","required":false,"schema":{"type":"string","maxLength":200}},{"name":"role","in":"query","required":false,"schema":{"type":"string","enum":["user","super_admin","ops","support","finance","content"]}},{"name":"status","in":"query","required":false,"schema":{"type":"string","maxLength":50}},{"name":"ownerId","in":"query","required":false,"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)$"}},{"name":"planId","in":"query","required":false,"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)$"}},{"name":"country","in":"query","required":false,"schema":{"description":"Users: effective country (billing, else last detected, else sign-up); workspaces: billing country, else the owner country","type":"string","pattern":"^(?:[A-Z]{2}|unknown)(?:,(?:[A-Z]{2}|unknown)){0,49}$"}}],"security":[{"session":[]},{"apiKey":[]}],"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"items":{"type":"array","items":{"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)$"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"},"data":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}}},"required":["id","createdAt","updatedAt"],"additionalProperties":{}}},"nextCursor":{"type":["string","null"]}},"required":["items","nextCursor"]},"example":{"items":[{"id":"01990000-0000-7000-8000-000000000001","createdAt":"2026-09-19T12:00:00.000Z","updatedAt":"2026-09-19T12:00:00.000Z","data":{}}],"nextCursor":"example"}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/moderation","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/moderation","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/moderation","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/moderation","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/moderation","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/moderation","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/moderation","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/moderation","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/moderation","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/moderation","traceId":"request-id"}}}}}}},"/v1/admin/audit-log":{"get":{"operationId":"adminListAuditLog","tags":["Admin"],"summary":"admin List Audit Log","description":"Requires admin permission audit.read. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"cursor","in":"query","required":false,"schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"schema":{"default":25,"type":"integer","minimum":1,"maximum":100}},{"name":"q","in":"query","required":false,"schema":{"type":"string","maxLength":200}},{"name":"role","in":"query","required":false,"schema":{"type":"string","enum":["user","super_admin","ops","support","finance","content"]}},{"name":"status","in":"query","required":false,"schema":{"type":"string","maxLength":50}},{"name":"ownerId","in":"query","required":false,"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)$"}},{"name":"planId","in":"query","required":false,"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)$"}},{"name":"country","in":"query","required":false,"schema":{"description":"Users: effective country (billing, else last detected, else sign-up); workspaces: billing country, else the owner country","type":"string","pattern":"^(?:[A-Z]{2}|unknown)(?:,(?:[A-Z]{2}|unknown)){0,49}$"}}],"security":[{"session":[]},{"apiKey":[]}],"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"items":{"type":"array","items":{"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)$"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"},"data":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}}},"required":["id","createdAt","updatedAt"],"additionalProperties":{}}},"nextCursor":{"type":["string","null"]}},"required":["items","nextCursor"]},"example":{"items":[{"id":"01990000-0000-7000-8000-000000000001","createdAt":"2026-09-19T12:00:00.000Z","updatedAt":"2026-09-19T12:00:00.000Z","data":{}}],"nextCursor":"example"}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/audit-log","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/audit-log","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/audit-log","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/audit-log","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/audit-log","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/audit-log","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/audit-log","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/audit-log","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/audit-log","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/audit-log","traceId":"request-id"}}}}}}},"/v1/admin/quality-runs":{"get":{"operationId":"adminListQualityRuns","tags":["Admin"],"summary":"admin List Quality Runs","description":"Requires admin permission quality.read. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"cursor","in":"query","required":false,"schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"schema":{"default":25,"type":"integer","minimum":1,"maximum":100}},{"name":"q","in":"query","required":false,"schema":{"type":"string","maxLength":200}},{"name":"role","in":"query","required":false,"schema":{"type":"string","enum":["user","super_admin","ops","support","finance","content"]}},{"name":"status","in":"query","required":false,"schema":{"type":"string","maxLength":50}},{"name":"ownerId","in":"query","required":false,"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)$"}},{"name":"planId","in":"query","required":false,"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)$"}},{"name":"country","in":"query","required":false,"schema":{"description":"Users: effective country (billing, else last detected, else sign-up); workspaces: billing country, else the owner country","type":"string","pattern":"^(?:[A-Z]{2}|unknown)(?:,(?:[A-Z]{2}|unknown)){0,49}$"}}],"security":[{"session":[]},{"apiKey":[]}],"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"items":{"type":"array","items":{"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)$"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"},"data":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}}},"required":["id","createdAt","updatedAt"],"additionalProperties":{}}},"nextCursor":{"type":["string","null"]}},"required":["items","nextCursor"]},"example":{"items":[{"id":"01990000-0000-7000-8000-000000000001","createdAt":"2026-09-19T12:00:00.000Z","updatedAt":"2026-09-19T12:00:00.000Z","data":{}}],"nextCursor":"example"}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/quality-runs","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/quality-runs","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/quality-runs","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/quality-runs","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/quality-runs","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/quality-runs","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/quality-runs","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/quality-runs","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/quality-runs","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/quality-runs","traceId":"request-id"}}}}}}},"/v1/admin/users/{id}/reset-2fa":{"post":{"operationId":"adminResetTwoFactor","tags":["Admin"],"summary":"admin Reset Two Factor","description":"Requires admin permission users.write. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"X-CSRF-Token","in":"header","required":false,"description":"Required for cookie-authenticated mutations; returned by sign-in/sign-up.","schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"reason":{"type":"string","minLength":1,"maxLength":1000}},"required":["reason"]},"example":{"reason":"example"}}}},"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"ok":{"type":"boolean"}},"required":["ok"]},"example":{"ok":true}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/users/{id}/reset-2fa","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/users/{id}/reset-2fa","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/users/{id}/reset-2fa","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/users/{id}/reset-2fa","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/users/{id}/reset-2fa","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/users/{id}/reset-2fa","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/users/{id}/reset-2fa","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/users/{id}/reset-2fa","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/users/{id}/reset-2fa","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/users/{id}/reset-2fa","traceId":"request-id"}}}}}}},"/v1/admin/users/{id}/impersonate":{"post":{"operationId":"adminImpersonate","tags":["Admin"],"summary":"admin Impersonate","description":"Requires admin permission users.write. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"X-CSRF-Token","in":"header","required":false,"description":"Required for cookie-authenticated mutations; returned by sign-in/sign-up.","schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","default":{},"type":"object","properties":{"reason":{"type":"string","minLength":1,"maxLength":1000}}},"example":{}}}},"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"token":{"type":"string"},"expiresIn":{"type":"number"},"readOnly":{"type":"boolean"}},"required":["token","expiresIn","readOnly"]},"example":{"token":"example","expiresIn":1,"readOnly":true}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/users/{id}/impersonate","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/users/{id}/impersonate","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/users/{id}/impersonate","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/users/{id}/impersonate","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/users/{id}/impersonate","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/users/{id}/impersonate","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/users/{id}/impersonate","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/users/{id}/impersonate","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/users/{id}/impersonate","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/users/{id}/impersonate","traceId":"request-id"}}}}}}},"/v1/admin/workspaces/{id}/credits":{"post":{"operationId":"adminAdjustCredits","tags":["Admin"],"summary":"admin Adjust Credits","description":"Requires admin permission credits.write. Retry with the same Idempotency-Key and identical body. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"Idempotency-Key","in":"header","required":true,"schema":{"type":"string","maxLength":200},"example":"request-2026-001"},{"name":"X-CSRF-Token","in":"header","required":false,"description":"Required for cookie-authenticated mutations; returned by sign-in/sign-up.","schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"amount":{"type":"integer","minimum":-10000000,"maximum":10000000},"reason":{"type":"string","minLength":1,"maxLength":1000}},"required":["amount","reason"]},"example":{"amount":-10000000,"reason":"example"}}}},"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"ok":{"type":"boolean"}},"required":["ok"]},"example":{"ok":true}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/workspaces/{id}/credits","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/workspaces/{id}/credits","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/workspaces/{id}/credits","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/workspaces/{id}/credits","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/workspaces/{id}/credits","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/workspaces/{id}/credits","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/workspaces/{id}/credits","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/workspaces/{id}/credits","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/workspaces/{id}/credits","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/workspaces/{id}/credits","traceId":"request-id"}}}}}}},"/v1/admin/workspaces/{id}":{"patch":{"operationId":"adminUpdateWorkspace","tags":["Admin"],"summary":"admin Update Workspace","description":"Requires admin permission users.write. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"X-CSRF-Token","in":"header","required":false,"description":"Required for cookie-authenticated mutations; returned by sign-in/sign-up.","schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"frozen":{"type":"boolean"},"planId":{"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)$"},"reason":{"type":"string","minLength":1,"maxLength":1000}}},"example":{"frozen":true,"planId":"01990000-0000-7000-8000-000000000001","reason":"example"}}}},"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","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)$"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"},"data":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}}},"required":["id","createdAt","updatedAt"],"additionalProperties":{}},"example":{"id":"01990000-0000-7000-8000-000000000001","createdAt":"2026-09-19T12:00:00.000Z","updatedAt":"2026-09-19T12:00:00.000Z","data":{}}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/workspaces/{id}","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/workspaces/{id}","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/workspaces/{id}","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/workspaces/{id}","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/workspaces/{id}","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/workspaces/{id}","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/workspaces/{id}","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/workspaces/{id}","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/workspaces/{id}","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/workspaces/{id}","traceId":"request-id"}}}}}}},"/v1/admin/refunds":{"post":{"operationId":"adminRefund","tags":["Admin"],"summary":"admin Refund","description":"Requires admin permission billing.write. Retry with the same Idempotency-Key and identical body. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"Idempotency-Key","in":"header","required":true,"schema":{"type":"string","maxLength":200},"example":"request-2026-001"},{"name":"X-CSRF-Token","in":"header","required":false,"description":"Required for cookie-authenticated mutations; returned by sign-in/sign-up.","schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"paymentId":{"type":"string","minLength":1,"maxLength":100},"amount":{"type":"integer","exclusiveMinimum":0,"maximum":2147483647,"description":"Refund amount in the payment currency minor unit (USD cents). Omit for a full refund."},"reason":{"type":"string","minLength":1,"maxLength":1000}},"required":["paymentId","reason"]},"example":{"paymentId":"example","amount":1,"reason":"example"}}}},"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","propertyNames":{"type":"string"},"additionalProperties":{}},"example":{}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/refunds","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/refunds","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/refunds","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/refunds","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/refunds","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/refunds","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/refunds","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/refunds","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/refunds","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/refunds","traceId":"request-id"}}}}}}},"/v1/admin/provider-health":{"get":{"operationId":"adminProviderHealth","tags":["Admin"],"summary":"admin Provider Health","description":"Requires admin permission providers.read. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false}],"security":[{"session":[]},{"apiKey":[]}],"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","propertyNames":{"type":"string"},"additionalProperties":{}},"example":{}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/provider-health","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/provider-health","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/provider-health","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/provider-health","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/provider-health","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/provider-health","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/provider-health","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/provider-health","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/provider-health","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/provider-health","traceId":"request-id"}}}}}}},"/v1/admin/quality/runs":{"post":{"operationId":"adminRunQuality","tags":["Admin"],"summary":"admin Run Quality","description":"Requires admin permission quality.write. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"X-CSRF-Token","in":"header","required":false,"description":"Required for cookie-authenticated mutations; returned by sign-in/sign-up.","schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"bindingIds":{"minItems":1,"type":"array","items":{"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)$"}},"sentenceLimit":{"default":200,"type":"integer","minimum":1,"maximum":200}},"required":["bindingIds"]},"example":{"bindingIds":["01990000-0000-7000-8000-000000000001"],"sentenceLimit":200}}}},"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","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)$"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"},"data":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}}},"required":["id","createdAt","updatedAt"],"additionalProperties":{}},"example":{"id":"01990000-0000-7000-8000-000000000001","createdAt":"2026-09-19T12:00:00.000Z","updatedAt":"2026-09-19T12:00:00.000Z","data":{}}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/quality/runs","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/quality/runs","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/quality/runs","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/quality/runs","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/quality/runs","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/quality/runs","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/quality/runs","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/quality/runs","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/quality/runs","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/quality/runs","traceId":"request-id"}}}}}}},"/v1/admin/moderation/{id}":{"patch":{"operationId":"adminResolveModeration","tags":["Admin"],"summary":"admin Resolve Moderation","description":"Requires admin permission moderation.write. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"X-CSRF-Token","in":"header","required":false,"description":"Required for cookie-authenticated mutations; returned by sign-in/sign-up.","schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"status":{"type":"string","enum":["open","approved","rejected","taken-down"]},"reason":{"type":"string","minLength":1,"maxLength":1000}},"required":["status","reason"]},"example":{"status":"open","reason":"example"}}}},"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","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)$"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"},"data":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}}},"required":["id","createdAt","updatedAt"],"additionalProperties":{}},"example":{"id":"01990000-0000-7000-8000-000000000001","createdAt":"2026-09-19T12:00:00.000Z","updatedAt":"2026-09-19T12:00:00.000Z","data":{}}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/moderation/{id}","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/moderation/{id}","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/moderation/{id}","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/moderation/{id}","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/moderation/{id}","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/moderation/{id}","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/moderation/{id}","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/moderation/{id}","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/moderation/{id}","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/moderation/{id}","traceId":"request-id"}}}}}}},"/v1/admin/jobs":{"get":{"operationId":"adminJobs","tags":["Admin"],"summary":"admin Jobs","description":"Requires admin permission jobs.read. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"queue","in":"query","required":false,"schema":{"type":"string"}},{"name":"status","in":"query","required":false,"schema":{"default":"failed","type":"string","enum":["failed","waiting","active","delayed"]}}],"security":[{"session":[]},{"apiKey":[]}],"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","propertyNames":{"type":"string"},"additionalProperties":{}},"example":{}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/jobs","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/jobs","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/jobs","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/jobs","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/jobs","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/jobs","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/jobs","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/jobs","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/jobs","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/jobs","traceId":"request-id"}}}}}}},"/v1/admin/jobs/{queue}/{id}/retry":{"post":{"operationId":"adminRetryJob","tags":["Admin"],"summary":"admin Retry Job","description":"Requires admin permission jobs.write. Retry with the same Idempotency-Key and identical body. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"queue","in":"path","required":true,"schema":{"type":"string"}},{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"Idempotency-Key","in":"header","required":true,"schema":{"type":"string","maxLength":200},"example":"request-2026-001"},{"name":"X-CSRF-Token","in":"header","required":false,"description":"Required for cookie-authenticated mutations; returned by sign-in/sign-up.","schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","propertyNames":{"type":"string"},"additionalProperties":{}},"example":{}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/jobs/{queue}/{id}/retry","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/jobs/{queue}/{id}/retry","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/jobs/{queue}/{id}/retry","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/jobs/{queue}/{id}/retry","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/jobs/{queue}/{id}/retry","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/jobs/{queue}/{id}/retry","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/jobs/{queue}/{id}/retry","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/jobs/{queue}/{id}/retry","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/jobs/{queue}/{id}/retry","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/jobs/{queue}/{id}/retry","traceId":"request-id"}}}}}}},"/v1/admin/jobs/{queue}/{id}/cancel":{"post":{"operationId":"adminCancelJob","tags":["Admin"],"summary":"admin Cancel Job","description":"Requires admin permission jobs.write. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"queue","in":"path","required":true,"schema":{"type":"string"}},{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"X-CSRF-Token","in":"header","required":false,"description":"Required for cookie-authenticated mutations; returned by sign-in/sign-up.","schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"ok":{"type":"boolean"}},"required":["ok"]},"example":{"ok":true}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/jobs/{queue}/{id}/cancel","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/jobs/{queue}/{id}/cancel","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/jobs/{queue}/{id}/cancel","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/jobs/{queue}/{id}/cancel","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/jobs/{queue}/{id}/cancel","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/jobs/{queue}/{id}/cancel","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/jobs/{queue}/{id}/cancel","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/jobs/{queue}/{id}/cancel","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/jobs/{queue}/{id}/cancel","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/jobs/{queue}/{id}/cancel","traceId":"request-id"}}}}}}},"/v1/admin/affiliates/{id}":{"patch":{"operationId":"adminUpdateAffiliate","tags":["Admin"],"summary":"admin Update Affiliate","description":"Requires admin permission affiliates.write. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"X-CSRF-Token","in":"header","required":false,"description":"Required for cookie-authenticated mutations; returned by sign-in/sign-up.","schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"status":{"type":"string","enum":["pending","approved","rejected"]},"commissionRate":{"type":"number","minimum":0,"maximum":0.25},"fraudFlag":{"type":"boolean"}},"required":["status","commissionRate"]},"example":{"status":"pending","commissionRate":0,"fraudFlag":true}}}},"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","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)$"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"},"data":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}}},"required":["id","createdAt","updatedAt"],"additionalProperties":{}},"example":{"id":"01990000-0000-7000-8000-000000000001","createdAt":"2026-09-19T12:00:00.000Z","updatedAt":"2026-09-19T12:00:00.000Z","data":{}}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/affiliates/{id}","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/affiliates/{id}","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/affiliates/{id}","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/affiliates/{id}","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/affiliates/{id}","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/affiliates/{id}","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/affiliates/{id}","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/affiliates/{id}","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/affiliates/{id}","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/affiliates/{id}","traceId":"request-id"}}}}}}},"/v1/admin/payouts/{id}/approve":{"post":{"operationId":"adminApprovePayout","tags":["Admin"],"summary":"admin Approve Payout","description":"Requires admin permission affiliates.write. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"X-CSRF-Token","in":"header","required":false,"description":"Required for cookie-authenticated mutations; returned by sign-in/sign-up.","schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","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)$"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"},"data":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}}},"required":["id","createdAt","updatedAt"],"additionalProperties":{}},"example":{"id":"01990000-0000-7000-8000-000000000001","createdAt":"2026-09-19T12:00:00.000Z","updatedAt":"2026-09-19T12:00:00.000Z","data":{}}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/payouts/{id}/approve","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/payouts/{id}/approve","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/payouts/{id}/approve","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/payouts/{id}/approve","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/payouts/{id}/approve","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/payouts/{id}/approve","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/payouts/{id}/approve","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/payouts/{id}/approve","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/payouts/{id}/approve","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/payouts/{id}/approve","traceId":"request-id"}}}}}}},"/v1/admin/payouts/{id}/paid":{"post":{"operationId":"adminMarkPayoutPaid","tags":["Admin"],"summary":"admin Mark Payout Paid","description":"Requires admin permission affiliates.write. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"X-CSRF-Token","in":"header","required":false,"description":"Required for cookie-authenticated mutations; returned by sign-in/sign-up.","schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"reference":{"type":"string","minLength":1,"maxLength":200}},"required":["reference"]},"example":{"reference":"example"}}}},"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","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)$"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"},"data":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}}},"required":["id","createdAt","updatedAt"],"additionalProperties":{}},"example":{"id":"01990000-0000-7000-8000-000000000001","createdAt":"2026-09-19T12:00:00.000Z","updatedAt":"2026-09-19T12:00:00.000Z","data":{}}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/payouts/{id}/paid","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/payouts/{id}/paid","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/payouts/{id}/paid","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/payouts/{id}/paid","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/payouts/{id}/paid","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/payouts/{id}/paid","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/payouts/{id}/paid","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/payouts/{id}/paid","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/payouts/{id}/paid","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/payouts/{id}/paid","traceId":"request-id"}}}}}}},"/v1/admin/payouts/{id}/export":{"get":{"operationId":"adminExportPayout","tags":["Admin"],"summary":"admin Export Payout","description":"Requires admin permission affiliates.read. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"csv":{"type":"string"}},"required":["csv"]},"example":{"csv":"example"}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/payouts/{id}/export","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/payouts/{id}/export","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/payouts/{id}/export","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/payouts/{id}/export","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/payouts/{id}/export","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/payouts/{id}/export","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/payouts/{id}/export","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/payouts/{id}/export","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/payouts/{id}/export","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/payouts/{id}/export","traceId":"request-id"}}}}}}},"/v1/admin/refusals":{"get":{"operationId":"adminListRefusals","tags":["Admin"],"summary":"Refused requests across users, newest first, with the specific reason","description":"Requires admin permission generations.read. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"cursor","in":"query","required":false,"schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"schema":{"default":25,"type":"integer","minimum":1,"maximum":100}},{"name":"q","in":"query","required":false,"schema":{"description":"User email, route, code, reason or reference","type":"string","maxLength":200}},{"name":"userId","in":"query","required":false,"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)$"}},{"name":"workspaceId","in":"query","required":false,"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)$"}},{"name":"from","in":"query","required":false,"schema":{"type":"string","format":"date","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])))$"}},{"name":"to","in":"query","required":false,"schema":{"type":"string","format":"date","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])))$"}}],"security":[{"session":[]},{"apiKey":[]}],"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"items":{"type":"array","items":{"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)$"},"createdAt":{"type":"string"},"user":{"anyOf":[{"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)$"},"email":{"type":"string"},"name":{"type":"string"}},"required":["id","email","name"]},{"type":"null"}]},"workspace":{"anyOf":[{"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)$"},"name":{"type":"string"}},"required":["id","name"]},{"type":"null"}]},"method":{"type":"string"},"route":{"type":"string","description":"Route pattern, e.g. /v1/video/projects/:id/render"},"path":{"type":["string","null"]},"status":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"code":{"type":"string","description":"Problem code the person got (VALIDATION_ERROR, FORBIDDEN, …)"},"reason":{"description":"The specific reason (refusal message, or the database error behind a VALIDATION_ERROR)","type":["string","null"]},"fields":{"anyOf":[{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"code":{"type":"string"},"message":{"type":"string"}},"required":["path","code"]}},{"type":"null"}]},"traceId":{"description":"The reference shown to the person","type":["string","null"]},"client":{"description":"User agent","type":["string","null"]},"input":{"anyOf":[{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}},{"type":"null"}],"description":"What the request sent: contentType, contentLength, query and JSON body (in full, secrets hidden; null for empty requests and rows before 2026-10-23)"}},"required":["id","createdAt","user","workspace","method","route","path","status","code","reason","fields","traceId","client","input"]}},"nextCursor":{"type":["string","null"]}},"required":["items","nextCursor"]},"example":{"items":[{"id":"01990000-0000-7000-8000-000000000001","createdAt":"2026-09-19T12:00:00.000Z","user":{"id":"01990000-0000-7000-8000-000000000001","email":"example","name":"Noura"},"workspace":{"id":"01990000-0000-7000-8000-000000000001","name":"Noura"},"method":"example","route":"example","path":"example","status":-9007199254740991,"code":"example","reason":"example","fields":[{"path":"example","code":"example","message":"example"}],"traceId":"example","client":"example","input":{}}],"nextCursor":"example"}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/refusals","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/refusals","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/refusals","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/refusals","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/refusals","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/refusals","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/refusals","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/refusals","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/refusals","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/refusals","traceId":"request-id"}}}}}}},"/v1/admin/generations":{"get":{"operationId":"adminListGenerations","tags":["Admin"],"summary":"Every generation across users, newest first, with a signed output URL (15 minutes); audit-logged","description":"Requires admin permission generations.read. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"cursor","in":"query","required":false,"schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"schema":{"default":25,"type":"integer","minimum":1,"maximum":100}},{"name":"q","in":"query","required":false,"schema":{"description":"User email or name, workspace name, or generation id","type":"string","maxLength":200}},{"name":"type","in":"query","required":false,"schema":{"type":"string","enum":["tts","voice-change","music","sfx","clean","dub","lyric-edit","voice-design","assistant","dialogue","captions","video","transcript","auto-tags","image","cartoon"],"description":"`cartoon` = Cartoon studio renders (video generations with input.kind cartoon); `video` excludes them"}},{"name":"status","in":"query","required":false,"schema":{"type":"string","enum":["queued","running","succeeded","failed","cancelled"]}},{"name":"userId","in":"query","required":false,"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)$"}},{"name":"workspaceId","in":"query","required":false,"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)$"}},{"name":"from","in":"query","required":false,"schema":{"description":"First day (inclusive)","type":"string","format":"date","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])))$"}},{"name":"to","in":"query","required":false,"schema":{"description":"Last day (inclusive)","type":"string","format":"date","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])))$"}},{"name":"failedOnly","in":"query","required":false,"schema":{"type":"string"}},{"name":"clonesOnly","in":"query","required":false,"schema":{"description":"Only generations voiced with a cloned voice","type":"string"}},{"name":"sort","in":"query","required":false,"schema":{"description":"newest (default) or by provider cost","type":"string","enum":["newest","costDesc","costAsc"]}}],"security":[{"session":[]},{"apiKey":[]}],"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"items":{"type":"array","items":{"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)$"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"},"type":{"type":"string"},"status":{"type":"string"},"progress":{"type":"number"},"errorCode":{"type":["string","null"]},"creditsReserved":{"type":"number"},"creditsCharged":{"type":"number"},"costUsd":{"type":"number","description":"Provider cost (USD) of the calls metered against this generation (= cost.totalUsd)"},"cost":{"type":"object","properties":{"totalUsd":{"type":"number"},"audioUsd":{"type":"number"},"videoUsd":{"type":"number"},"otherUsd":{"type":"number"},"byCapability":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"number"},"description":"USD per voice-engine capability"},"calls":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"chargedUsd":{"type":"number","description":"Credits charged × $ per credit (cheapest top-up pack)"},"margin":{"description":"chargedUsd ÷ totalUsd; null without cost","type":["number","null"]}},"required":["totalUsd","audioUsd","videoUsd","otherUsd","byCapability","calls","chargedUsd","margin"]},"video":{"description":"Video renders only","type":"object","properties":{"projectId":{"anyOf":[{"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)$"},{"type":"null"}]},"cartoonProjectId":{"anyOf":[{"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)$"},{"type":"null"}]},"seconds":{"type":"number"},"renderSeconds":{"type":"number"},"tier":{"type":["string","null"]},"aspectRatio":{"type":["string","null"]},"resolution":{"type":["string","null"]}},"required":["projectId","cartoonProjectId","seconds","renderSeconds","tier","aspectRatio","resolution"]},"duration":{"description":"Output length in seconds","type":["number","null"]},"locale":{"type":"string"},"dialect":{"type":["string","null"]},"model":{"anyOf":[{"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)$"},"slug":{"type":"string"},"name":{"anyOf":[{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"string"}},{"type":"null"}]}},"required":["id","slug","name"]},{"type":"null"}]},"voice":{"anyOf":[{"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)$"},"name":{"anyOf":[{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"string"}},{"type":"null"}]},"engine":{"type":["string","null"]},"isClone":{"type":"boolean"},"cloneStatus":{"type":["string","null"]}},"required":["id","name","engine","isClone","cloneStatus"]},{"type":"null"}]},"input":{"type":"object","properties":{"text":{"type":"string","description":"Script, dialogue lines, prompt/lyrics or source file name, cut at 500 characters"},"truncated":{"type":"boolean"},"length":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"title":{"type":["string","null"]},"sourceName":{"type":["string","null"]},"lines":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]}},"required":["text","truncated","length","title","sourceName","lines"]},"user":{"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)$"},"email":{"type":"string"},"name":{"type":"string"},"role":{"type":"string"}},"required":["id","email","name","role"]},"workspace":{"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)$"},"name":{"type":"string"},"planSlug":{"type":["string","null"]}},"required":["id","name","planSlug"]},"output":{"anyOf":[{"type":"object","properties":{"kind":{"type":"string","enum":["audio","video","image"]},"format":{"type":"string"},"url":{"type":"string"},"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":["kind","format","url","expiresAt"]},{"type":"null"}]},"images":{"description":"Image runs only: input and output pictures, signed for 15 minutes","anyOf":[{"type":"object","properties":{"mode":{"type":["string","null"]},"inputs":{"type":"array","items":{"type":"object","properties":{"url":{"type":"string"},"name":{"type":["string","null"]}},"required":["url","name"]},"description":"The photos the person gave (the earlier image being edited first, then the uploads)"},"outputs":{"type":"array","items":{"type":"object","properties":{"url":{"type":"string"},"thumbUrl":{"type":["string","null"]},"width":{"type":["number","null"]},"height":{"type":["number","null"]}},"required":["url","thumbUrl","width","height"]}},"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":["mode","inputs","outputs","expiresAt"]},{"type":"null"}]}},"required":["id","createdAt","updatedAt","type","status","progress","errorCode","creditsReserved","creditsCharged","costUsd","cost","duration","locale","dialect","model","voice","input","user","workspace","output"]}},"nextCursor":{"type":["string","null"]}},"required":["items","nextCursor"]},"example":{"items":[{"id":"01990000-0000-7000-8000-000000000001","createdAt":"2026-09-19T12:00:00.000Z","updatedAt":"2026-09-19T12:00:00.000Z","type":"example","status":"example","progress":1,"errorCode":"example","creditsReserved":1,"creditsCharged":1,"costUsd":1,"cost":{"totalUsd":1,"audioUsd":1,"videoUsd":1,"otherUsd":1,"byCapability":{},"calls":-9007199254740991,"chargedUsd":1,"margin":"example"},"video":{"projectId":"01990000-0000-7000-8000-000000000001","cartoonProjectId":"01990000-0000-7000-8000-000000000001","seconds":1,"renderSeconds":1,"tier":"example","aspectRatio":"example","resolution":"example"},"duration":"example","locale":"ar-SA","dialect":"ar-SA","model":{"id":"01990000-0000-7000-8000-000000000001","slug":"example","name":{}},"voice":{"id":"01990000-0000-7000-8000-000000000001","name":{},"engine":"example","isClone":true,"cloneStatus":"example"},"input":{"text":"مرحباً بك في فوكلا.","truncated":true,"length":-9007199254740991,"title":"example","sourceName":"example","lines":-9007199254740991},"user":{"id":"01990000-0000-7000-8000-000000000001","email":"example","name":"Noura","role":"example"},"workspace":{"id":"01990000-0000-7000-8000-000000000001","name":"Noura","planSlug":"example"},"output":{"kind":"audio","format":"example","url":"example","expiresAt":"2026-09-19T12:00:00.000Z"},"images":{"mode":"example","inputs":[{"url":"example","name":"Noura"}],"outputs":[{"url":"example","thumbUrl":"http://localhost:4000/example","width":"example","height":"example"}],"expiresAt":"2026-09-19T12:00:00.000Z"}}],"nextCursor":"example"}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/generations","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/generations","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/generations","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/generations","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/generations","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/generations","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/generations","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/generations","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/generations","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/generations","traceId":"request-id"}}}}}}},"/v1/admin/renewals":{"get":{"operationId":"adminRenewals","tags":["Admin"],"summary":"Every paid subscription with its payments, renewal date and renewal outcome; money collected and expected, cancellations before and after renewing, failed charges, churn risk, by plan, cohort and country","description":"Requires admin permission billing.read. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false}],"security":[{"session":[]},{"apiKey":[]}],"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"generatedAt":{"type":"string"},"summary":{"type":"object","properties":{"customers":{"type":"number","description":"Paying workspaces"},"subscriptions":{"type":"number"},"duplicates":{"type":"number","description":"Workspaces with two subscriptions that both renew"},"mrrUsd":{"type":"number"},"mrrAfterCancellationsUsd":{"type":"number"},"due":{"type":"number","description":"First renewals due by now"},"renewed":{"type":"number"},"renewalRate":{"description":"Renewed per 100 settled due renewals","type":["number","null"]},"awaiting":{"type":"number"},"collected":{"type":"object","properties":{"totalUsd":{"type":"number"},"firstUsd":{"type":"number"},"renewalsUsd":{"type":"number"},"upgradesUsd":{"type":"number"},"renewalPayments":{"type":"number"}},"required":["totalUsd","firstUsd","renewalsUsd","upgradesUsd","renewalPayments"]},"next7":{"type":"number"},"expected30Usd":{"type":"number"},"expected30":{"type":"number"},"ending30Usd":{"type":"number"},"cancelledBeforeRenewal":{"type":"number"},"cancelledAfterRenewal":{"type":"number"},"endedBeforeRenewal":{"type":"number"},"scheduledToEnd":{"type":"number"},"failed":{"type":"number"},"overdue":{"type":"number"},"recovered":{"type":"number"},"switched":{"type":"number"},"atRisk":{"type":"number"},"highRisk":{"type":"number"},"offers":{"type":"object","properties":{"accepted":{"type":"number"},"pending":{"type":"number"},"applied":{"type":"number"}},"required":["accepted","pending","applied"]},"states":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"number"}}},"required":["customers","subscriptions","duplicates","mrrUsd","mrrAfterCancellationsUsd","due","renewed","renewalRate","awaiting","collected","next7","expected30Usd","expected30","ending30Usd","cancelledBeforeRenewal","cancelledAfterRenewal","endedBeforeRenewal","scheduledToEnd","failed","overdue","recovered","switched","atRisk","highRisk","offers","states"]},"calendar":{"type":"array","items":{"type":"object","properties":{"day":{"type":"string"},"count":{"type":"object","properties":{"renewed":{"type":"number"},"expected":{"type":"number"},"ending":{"type":"number"},"ended":{"type":"number"},"unpaid":{"type":"number"}},"required":["renewed","expected","ending","ended","unpaid"]},"usd":{"type":"object","properties":{"renewed":{"type":"number"},"expected":{"type":"number"},"ending":{"type":"number"},"ended":{"type":"number"},"unpaid":{"type":"number"}},"required":["renewed","expected","ending","ended","unpaid"]}},"required":["day","count","usd"]}},"byPlan":{"type":"array","items":{"type":"object","properties":{"plan":{"type":"string"},"name":{"anyOf":[{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"string"}},{"type":"null"}]},"customers":{"type":"number"},"mrrUsd":{"type":"number"},"due":{"type":"number"},"renewed":{"type":"number"},"renewalRate":{"type":["number","null"]},"cancelling":{"type":"number"},"churned":{"type":"number"},"unpaid":{"type":"number"},"upcoming30":{"type":"number"},"paidUsd":{"type":"number"}},"required":["plan","name","customers","mrrUsd","due","renewed","renewalRate","cancelling","churned","unpaid","upcoming30","paidUsd"]}},"cohorts":{"type":"array","items":{"type":"object","properties":{"week":{"type":"string"},"started":{"type":"number"},"active":{"type":"number"},"renewed":{"type":"number"},"ending":{"type":"number"},"ended":{"type":"number"},"unpaid":{"type":"number"},"due":{"type":"number"},"paidUsd":{"type":"number"}},"required":["week","started","active","renewed","ending","ended","unpaid","due","paidUsd"]}},"reasons":{"type":"array","items":{"type":"object","properties":{"reason":{"type":"string"},"before":{"type":"number"},"after":{"type":"number"},"count":{"type":"number"}},"required":["reason","before","after","count"]}},"countries":{"type":"array","items":{"type":"object","properties":{"country":{"type":"string"},"customers":{"type":"number"},"mrrUsd":{"type":"number"},"due":{"type":"number"},"renewed":{"type":"number"},"ending":{"type":"number"}},"required":["country","customers","mrrUsd","due","renewed","ending"]}},"items":{"type":"array","items":{"type":"object","properties":{"subscriptionId":{"type":"string"},"workspace":{"type":"object","properties":{"id":{"type":["string","null"]},"name":{"type":["string","null"]}},"required":["id","name"]},"user":{"type":"object","properties":{"id":{"type":["string","null"]},"email":{"type":["string","null"]},"name":{"type":["string","null"]},"country":{"type":["string","null"]}},"required":["id","email","name","country"]},"plan":{"anyOf":[{"type":"object","properties":{"slug":{"type":"string"},"name":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"string"}},"credits":{"type":"number"}},"required":["slug","name","credits"]},{"type":"null"}]},"interval":{"type":"string","enum":["monthly","annual"]},"priceUsd":{"type":"number","description":"What it renews at (USD list price of the last non-upgrade payment)"},"mrrUsd":{"type":"number"},"currency":{"type":"string"},"startedAt":{"type":"string"},"payments":{"type":"array","items":{"type":"object","properties":{"at":{"type":"string"},"kind":{"type":"string","enum":["first","renewal","upgrade"]},"amountUsd":{"type":"number"},"chargedAmount":{"type":"number"},"currency":{"type":"string"}},"required":["at","kind","amountUsd","chargedAmount","currency"]}},"paidUsd":{"type":"number"},"renewalsUsd":{"type":"number"},"renewals":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"firstRenewalAt":{"type":"string"},"nextRenewalAt":{"type":["string","null"]},"daysToRenewal":{"type":["number","null"]},"state":{"type":"string","enum":["renewed","renewedCancelling","renewedEnded","upcoming","cancelling","failed","overdue","churned","switched"]},"providerStatus":{"type":["string","null"]},"cancellation":{"anyOf":[{"type":"object","properties":{"at":{"type":"string"},"reason":{"type":"string"},"comment":{"type":["string","null"]},"afterRenewal":{"type":"boolean"}},"required":["at","reason","comment","afterRenewal"]},{"type":"null"}]},"failures":{"type":"array","items":{"type":"object","properties":{"at":{"type":"string"},"code":{"type":["string","null"]}},"required":["at","code"]}},"recovered":{"type":"boolean"},"retentionOffer":{"anyOf":[{"type":"object","properties":{"status":{"type":"string"},"percent":{"type":"number"}},"required":["status","percent"]},{"type":"null"}]},"usage":{"type":"object","properties":{"cycleCredits":{"type":"number"},"cycleGenerations":{"type":"number"},"usedPercent":{"type":["number","null"]},"lastActiveAt":{"type":["string","null"]}},"required":["cycleCredits","cycleGenerations","usedPercent","lastActiveAt"]},"risk":{"anyOf":[{"type":"string","enum":["high","medium"]},{"type":"null"}]},"riskReasons":{"type":"array","items":{"type":"string","enum":["paymentIssues","noUsage","lowUsage","inactive","offerAccepted"]}},"duplicate":{"type":"boolean","description":"Another subscription of the same workspace also renews (charged twice)"}},"required":["subscriptionId","workspace","user","plan","interval","priceUsd","mrrUsd","currency","startedAt","payments","paidUsd","renewalsUsd","renewals","firstRenewalAt","nextRenewalAt","daysToRenewal","state","providerStatus","cancellation","failures","recovered","retentionOffer","usage","risk","riskReasons","duplicate"]}}},"required":["generatedAt","summary","calendar","byPlan","cohorts","reasons","countries","items"]},"example":{"generatedAt":"2026-09-19T12:00:00.000Z","summary":{"customers":1,"subscriptions":1,"duplicates":1,"mrrUsd":1,"mrrAfterCancellationsUsd":1,"due":1,"renewed":1,"renewalRate":"example","awaiting":1,"collected":{"totalUsd":1,"firstUsd":1,"renewalsUsd":1,"upgradesUsd":1,"renewalPayments":1},"next7":1,"expected30Usd":1,"expected30":1,"ending30Usd":1,"cancelledBeforeRenewal":1,"cancelledAfterRenewal":1,"endedBeforeRenewal":1,"scheduledToEnd":1,"failed":1,"overdue":1,"recovered":1,"switched":1,"atRisk":1,"highRisk":1,"offers":{"accepted":1,"pending":1,"applied":1},"states":{}},"calendar":[{"day":"example","count":{"renewed":1,"expected":1,"ending":1,"ended":1,"unpaid":1},"usd":{"renewed":1,"expected":1,"ending":1,"ended":1,"unpaid":1}}],"byPlan":[{"plan":"example","name":{},"customers":1,"mrrUsd":1,"due":1,"renewed":1,"renewalRate":"example","cancelling":1,"churned":1,"unpaid":1,"upcoming30":1,"paidUsd":1}],"cohorts":[{"week":"example","started":1,"active":1,"renewed":1,"ending":1,"ended":1,"unpaid":1,"due":1,"paidUsd":1}],"reasons":[{"reason":"example","before":1,"after":1,"count":1}],"countries":[{"country":"example","customers":1,"mrrUsd":1,"due":1,"renewed":1,"ending":1}],"items":[{"subscriptionId":"example","workspace":{"id":"example","name":"Noura"},"user":{"id":"example","email":"example","name":"Noura","country":"example"},"plan":{"slug":"example","name":{},"credits":1},"interval":"monthly","priceUsd":1,"mrrUsd":1,"currency":"example","startedAt":"2026-09-19T12:00:00.000Z","payments":[{"at":"example","kind":"first","amountUsd":1,"chargedAmount":1,"currency":"example"}],"paidUsd":1,"renewalsUsd":1,"renewals":-9007199254740991,"firstRenewalAt":"2026-09-19T12:00:00.000Z","nextRenewalAt":"2026-09-19T12:00:00.000Z","daysToRenewal":"example","state":"renewed","providerStatus":"example","cancellation":{"at":"example","reason":"example","comment":"example","afterRenewal":true},"failures":[{"at":"example","code":"example"}],"recovered":true,"retentionOffer":{"status":"example","percent":1},"usage":{"cycleCredits":1,"cycleGenerations":1,"usedPercent":"example","lastActiveAt":"2026-09-19T12:00:00.000Z"},"risk":"high","riskReasons":["paymentIssues"],"duplicate":true}]}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/renewals","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/renewals","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/renewals","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/renewals","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/renewals","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/renewals","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/renewals","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/renewals","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/renewals","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/renewals","traceId":"request-id"}}}}}}},"/v1/admin/mobile":{"get":{"operationId":"adminMobile","tags":["Admin"],"summary":"Mobile app users: signups by platform, app DAU WAU MAU, retention against web, tools, countries, versions, payments, push, and the synced Google Play data (installs, store listing, ratings, reviews, vitals)","description":"Requires admin permission overview.read. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"days","in":"query","required":false,"schema":{"default":30,"description":"7, 30 or 90 (others read as 30)","type":"integer","minimum":1,"maximum":90}}],"security":[{"session":[]},{"apiKey":[]}],"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"generatedAt":{"type":"string"},"days":{"type":"number"},"window":{"type":"object","properties":{"from":{"type":"string"},"to":{"type":"string"}},"required":["from","to"]},"minN":{"type":"number","description":"Rates over fewer people are null"},"summary":{"type":"object","properties":{"appUsers":{"type":"number"},"approxUsers":{"type":"number"},"platforms":{"type":"object","properties":{"android":{"type":"number"},"ios":{"type":"number"}},"required":["android","ios"]},"signups":{"type":"object","properties":{"app":{"type":"number"},"previous":{"type":"number"},"android":{"type":"number"},"ios":{"type":"number"},"web":{"type":"number"},"all":{"type":"number"},"appShare":{"description":"Percent; null below minN people","type":["number","null"]},"approx":{"type":"number"}},"required":["app","previous","android","ios","web","all","appShare","approx"]},"active":{"type":"object","properties":{"dau":{"type":"number"},"wau":{"type":"number"},"mau":{"type":"number"},"stickiness":{"description":"Average app DAU of the last 7 days per 100 MAU","type":["number","null"]},"trackedSince":{"type":["string","null"]}},"required":["dau","wau","mau","stickiness","trackedSince"]},"paid":{"type":"object","properties":{"app":{"type":"number"},"appRevenueUsd":{"type":"number"},"web":{"type":"number"},"webUsers":{"type":"number"},"appConversion":{"description":"Percent; null below minN people","type":["number","null"]},"webConversion":{"description":"Percent; null below minN people","type":["number","null"]}},"required":["app","appRevenueUsd","web","webUsers","appConversion","webConversion"]},"push":{"type":"object","properties":{"users":{"type":"number"},"rate":{"description":"Percent; null below minN people","type":["number","null"]}},"required":["users","rate"]},"versions":{"type":"object","properties":{"latest":{"type":["string","null"]},"onLatest":{"type":"number"},"known":{"type":"number"},"share":{"description":"Percent; null below minN people","type":["number","null"]}},"required":["latest","onLatest","known","share"]}},"required":["appUsers","approxUsers","platforms","signups","active","paid","push","versions"]},"signupsDaily":{"type":"array","items":{"type":"object","properties":{"day":{"type":"string"},"android":{"type":"number"},"ios":{"type":"number"},"web":{"type":"number"},"approx":{"type":"number"}},"required":["day","android","ios","web","approx"]}},"dauDaily":{"type":"array","items":{"type":"object","properties":{"day":{"type":"string"},"users":{"type":"number"},"tracked":{"type":"boolean"}},"required":["day","users","tracked"]}},"cohorts":{"type":"array","items":{"type":"object","properties":{"week":{"type":"string"},"app":{"type":"object","properties":{"signups":{"type":"number"},"d1":{"type":"object","properties":{"eligible":{"type":"number"},"retained":{"type":"number"},"rate":{"description":"Percent; null below minN people","type":["number","null"]}},"required":["eligible","retained","rate"]},"d7":{"type":"object","properties":{"eligible":{"type":"number"},"retained":{"type":"number"},"rate":{"description":"Percent; null below minN people","type":["number","null"]}},"required":["eligible","retained","rate"]},"d30":{"type":"object","properties":{"eligible":{"type":"number"},"retained":{"type":"number"},"rate":{"description":"Percent; null below minN people","type":["number","null"]}},"required":["eligible","retained","rate"]}},"required":["signups","d1","d7","d30"]},"web":{"type":"object","properties":{"signups":{"type":"number"},"d1":{"type":"object","properties":{"eligible":{"type":"number"},"retained":{"type":"number"},"rate":{"description":"Percent; null below minN people","type":["number","null"]}},"required":["eligible","retained","rate"]},"d7":{"type":"object","properties":{"eligible":{"type":"number"},"retained":{"type":"number"},"rate":{"description":"Percent; null below minN people","type":["number","null"]}},"required":["eligible","retained","rate"]},"d30":{"type":"object","properties":{"eligible":{"type":"number"},"retained":{"type":"number"},"rate":{"description":"Percent; null below minN people","type":["number","null"]}},"required":["eligible","retained","rate"]}},"required":["signups","d1","d7","d30"]}},"required":["week","app","web"]}},"tools":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string"},"fromApp":{"type":"number"},"byAppUsers":{"type":"number"},"users":{"type":"number"}},"required":["type","fromApp","byAppUsers","users"]}},"countries":{"type":"array","items":{"type":"object","properties":{"country":{"type":"string"},"users":{"type":"number"},"paid":{"type":"number"}},"required":["country","users","paid"]}},"versions":{"type":"array","items":{"type":"object","properties":{"platform":{"type":"string","enum":["android","ios"]},"version":{"type":"string"},"users":{"type":"number"},"lastSeenAt":{"type":["string","null"]},"latest":{"type":"boolean"}},"required":["platform","version","users","lastSeenAt","latest"]}},"users":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"email":{"type":"string"},"name":{"type":["string","null"]},"country":{"type":["string","null"]},"platform":{"type":"string","enum":["android","ios"]},"version":{"type":["string","null"]},"signupPlatform":{"type":"string","enum":["android","ios","web"]},"signupApprox":{"type":"boolean"},"signedUpAt":{"type":"string"},"firstAppAt":{"type":["string","null"]},"lastAppAt":{"type":["string","null"]},"lastActiveAt":{"type":["string","null"]},"generations":{"type":"number"},"paid":{"type":"boolean"},"paidUsd":{"type":"number"},"push":{"type":"boolean"},"approx":{"type":"boolean","description":"Found only through sessions or a derived signup platform (history before tracking)"}},"required":["id","email","name","country","platform","version","signupPlatform","signupApprox","signedUpAt","firstAppAt","lastAppAt","lastActiveAt","generations","paid","paidUsd","push","approx"]}},"checkouts":{"type":"object","properties":{"started":{"type":"number"},"completed":{"type":"number"}},"required":["started","completed"]},"play":{"type":"object","properties":{"configured":{"type":"boolean"},"hasServiceAccount":{"type":"boolean"},"missing":{"type":"array","items":{"type":"string"},"description":"Environment values still to set"},"package":{"type":"string"},"sync":{"type":"array","items":{"type":"object","properties":{"source":{"type":"string","enum":["installs","acquisition","ratings","reviews","vitals"]},"status":{"type":"string","description":"ok, empty, error, skipped or never"},"error":{"type":["string","null"]},"rows":{"type":"number"},"attemptedAt":{"type":["string","null"]},"succeededAt":{"type":["string","null"]}},"required":["source","status","error","rows","attemptedAt","succeededAt"]}},"totals":{"type":"object","properties":{"installs":{"type":["number","null"]},"uninstalls":{"type":["number","null"]},"visitors":{"type":["number","null"]},"acquisitions":{"type":["number","null"]},"activeDevices":{"type":["number","null"]},"rating":{"type":["number","null"]}},"required":["installs","uninstalls","visitors","acquisitions","activeDevices","rating"]},"daily":{"type":"array","items":{"type":"object","properties":{"day":{"type":"string"},"installs":{"type":["number","null"]},"uninstalls":{"type":["number","null"]},"upgrades":{"type":["number","null"]},"activeDevices":{"type":["number","null"]},"visitors":{"type":["number","null"]},"acquisitions":{"type":["number","null"]},"rating":{"type":["number","null"]},"totalRating":{"type":["number","null"]}},"required":["day","installs","uninstalls","upgrades","activeDevices","visitors","acquisitions","rating","totalRating"]}},"countries":{"type":"array","items":{"type":"object","properties":{"country":{"type":"string"},"installs":{"type":"number"},"uninstalls":{"type":"number"},"activeDevices":{"type":"number"}},"required":["country","installs","uninstalls","activeDevices"]}},"ratings":{"type":"object","properties":{"stars":{"type":"array","items":{"type":"object","properties":{"stars":{"type":"number"},"count":{"type":"number"}},"required":["stars","count"]}},"reviews":{"type":"number"},"lowUnanswered":{"type":"number","description":"1 and 2 star reviews without a reply"}},"required":["stars","reviews","lowUnanswered"]},"reviews":{"type":"array","items":{"type":"object","properties":{"reviewId":{"type":"string"},"author":{"type":["string","null"]},"stars":{"type":["number","null"]},"text":{"type":["string","null"]},"language":{"type":["string","null"]},"device":{"type":["string","null"]},"androidVersion":{"type":["number","null"]},"appVersion":{"type":["string","null"]},"lastModified":{"type":["string","null"]},"replyText":{"type":["string","null"]},"replyAt":{"type":["string","null"]}},"required":["reviewId","author","stars","text","language","device","androidVersion","appVersion","lastModified","replyText","replyAt"]}},"vitals":{"type":"array","items":{"type":"object","properties":{"day":{"type":"string"},"crashRate":{"type":["number","null"]},"crashPerceivedRate":{"type":["number","null"]},"crashUsers":{"type":["number","null"]},"anrRate":{"type":["number","null"]},"anrPerceivedRate":{"type":["number","null"]},"anrUsers":{"type":["number","null"]}},"required":["day","crashRate","crashPerceivedRate","crashUsers","anrRate","anrPerceivedRate","anrUsers"]}},"thresholds":{"type":"object","properties":{"userPerceivedCrashRate":{"type":"number"},"userPerceivedAnrRate":{"type":"number"}},"required":["userPerceivedCrashRate","userPerceivedAnrRate"]},"replyMax":{"type":"number"}},"required":["configured","hasServiceAccount","missing","package","sync","totals","daily","countries","ratings","reviews","vitals","thresholds","replyMax"]}},"required":["generatedAt","days","window","minN","summary","signupsDaily","dauDaily","cohorts","tools","countries","versions","users","checkouts","play"]},"example":{"generatedAt":"2026-09-19T12:00:00.000Z","days":1,"window":{"from":"example","to":"example"},"minN":1,"summary":{"appUsers":1,"approxUsers":1,"platforms":{"android":1,"ios":1},"signups":{"app":1,"previous":1,"android":1,"ios":1,"web":1,"all":1,"appShare":"example","approx":1},"active":{"dau":1,"wau":1,"mau":1,"stickiness":"example","trackedSince":"example"},"paid":{"app":1,"appRevenueUsd":1,"web":1,"webUsers":1,"appConversion":"example","webConversion":"example"},"push":{"users":1,"rate":"example"},"versions":{"latest":"example","onLatest":1,"known":1,"share":"example"}},"signupsDaily":[{"day":"example","android":1,"ios":1,"web":1,"approx":1}],"dauDaily":[{"day":"example","users":1,"tracked":true}],"cohorts":[{"week":"example","app":{"signups":1,"d1":{"eligible":1,"retained":1,"rate":"example"},"d7":{"eligible":1,"retained":1,"rate":"example"},"d30":{"eligible":1,"retained":1,"rate":"example"}},"web":{"signups":1,"d1":{"eligible":1,"retained":1,"rate":"example"},"d7":{"eligible":1,"retained":1,"rate":"example"},"d30":{"eligible":1,"retained":1,"rate":"example"}}}],"tools":[{"type":"example","fromApp":1,"byAppUsers":1,"users":1}],"countries":[{"country":"example","users":1,"paid":1}],"versions":[{"platform":"android","version":"example","users":1,"lastSeenAt":"2026-09-19T12:00:00.000Z","latest":true}],"users":[{"id":"example","email":"example","name":"Noura","country":"example","platform":"android","version":"example","signupPlatform":"android","signupApprox":true,"signedUpAt":"2026-09-19T12:00:00.000Z","firstAppAt":"2026-09-19T12:00:00.000Z","lastAppAt":"2026-09-19T12:00:00.000Z","lastActiveAt":"2026-09-19T12:00:00.000Z","generations":1,"paid":true,"paidUsd":1,"push":true,"approx":true}],"checkouts":{"started":1,"completed":1},"play":{"configured":true,"hasServiceAccount":true,"missing":["example"],"package":"example","sync":[{"source":"installs","status":"example","error":"example","rows":1,"attemptedAt":"2026-09-19T12:00:00.000Z","succeededAt":"2026-09-19T12:00:00.000Z"}],"totals":{"installs":"example","uninstalls":"example","visitors":"example","acquisitions":"example","activeDevices":"example","rating":"example"},"daily":[{"day":"example","installs":"example","uninstalls":"example","upgrades":"example","activeDevices":"example","visitors":"example","acquisitions":"example","rating":"example","totalRating":"example"}],"countries":[{"country":"example","installs":1,"uninstalls":1,"activeDevices":1}],"ratings":{"stars":[{"stars":1,"count":1}],"reviews":1,"lowUnanswered":1},"reviews":[{"reviewId":"example","author":"example","stars":"example","text":"مرحباً بك في فوكلا.","language":"ar","device":"example","androidVersion":"example","appVersion":"example","lastModified":"example","replyText":"example","replyAt":"2026-09-19T12:00:00.000Z"}],"vitals":[{"day":"example","crashRate":"example","crashPerceivedRate":"example","crashUsers":"example","anrRate":"example","anrPerceivedRate":"example","anrUsers":"example"}],"thresholds":{"userPerceivedCrashRate":1,"userPerceivedAnrRate":1},"replyMax":1}}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/mobile","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/mobile","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/mobile","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/mobile","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/mobile","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/mobile","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/mobile","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/mobile","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/mobile","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/mobile","traceId":"request-id"}}}}}}},"/v1/admin/mobile/play/sync":{"post":{"operationId":"adminMobilePlaySync","tags":["Admin"],"summary":"Sync Google Play now (reports, reviews, vitals; each source on its own). 503 when Google Play is not connected, 409 while a sync runs. Audit-logged","description":"Requires admin permission jobs.write. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"X-CSRF-Token","in":"header","required":false,"description":"Required for cookie-authenticated mutations; returned by sign-in/sign-up.","schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"skipped":{"type":"string"},"sources":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"object","properties":{"status":{"type":"string"},"rows":{"type":"number"},"error":{"type":["string","null"]}},"required":["status","rows","error"]}}},"required":["sources"]},"example":{"skipped":"example","sources":{}}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/mobile/play/sync","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/mobile/play/sync","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/mobile/play/sync","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/mobile/play/sync","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/mobile/play/sync","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/mobile/play/sync","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/mobile/play/sync","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/mobile/play/sync","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/mobile/play/sync","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/mobile/play/sync","traceId":"request-id"}}}}}}},"/v1/admin/mobile/play/reviews/{id}/reply":{"post":{"operationId":"adminMobileReviewReply","tags":["Admin"],"summary":"Reply on Google Play to a review (or replace the reply), at most 350 characters. Audit-logged","description":"Requires admin permission support.write. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"X-CSRF-Token","in":"header","required":false,"description":"Required for cookie-authenticated mutations; returned by sign-in/sign-up.","schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"text":{"type":"string","minLength":1,"maxLength":350}},"required":["text"]},"example":{"text":"مرحباً بك في فوكلا."}}}},"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"reviewId":{"type":"string"},"replyText":{"type":"string"},"replyAt":{"type":"string"}},"required":["reviewId","replyText","replyAt"]},"example":{"reviewId":"example","replyText":"example","replyAt":"2026-09-19T12:00:00.000Z"}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/mobile/play/reviews/{id}/reply","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/mobile/play/reviews/{id}/reply","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/mobile/play/reviews/{id}/reply","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/mobile/play/reviews/{id}/reply","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/mobile/play/reviews/{id}/reply","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/mobile/play/reviews/{id}/reply","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/mobile/play/reviews/{id}/reply","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/mobile/play/reviews/{id}/reply","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/mobile/play/reviews/{id}/reply","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/mobile/play/reviews/{id}/reply","traceId":"request-id"}}}}}}},"/v1/admin/cancellations":{"get":{"operationId":"adminCancellations","tags":["Admin"],"summary":"Scheduled cancellations, newest first, with plan, reason, timing, usage, outcome and follow-up","description":"Requires admin permission billing.read. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"q","in":"query","required":false,"schema":{"type":"string","maxLength":200}},{"name":"reason","in":"query","required":false,"schema":{"type":"string","maxLength":60}},{"name":"outcome","in":"query","required":false,"schema":{"type":"string","enum":["ending","ended","kept","returned","deleted"]}},{"name":"plan","in":"query","required":false,"schema":{"type":"string","maxLength":60}},{"name":"from","in":"query","required":false,"schema":{"type":"string","format":"date","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])))$"}},{"name":"to","in":"query","required":false,"schema":{"type":"string","format":"date","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])))$"}},{"name":"cursor","in":"query","required":false,"schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","minimum":1,"maximum":100}}],"security":[{"session":[]},{"apiKey":[]}],"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"items":{"type":"array","items":{"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)$"},"createdAt":{"type":"string"},"reason":{"type":"string"},"comment":{"type":["string","null"]},"declinedOffer":{"type":["string","null"]},"user":{"type":"object","properties":{"id":{"type":["string","null"]},"email":{"type":["string","null"]},"name":{"type":["string","null"]},"country":{"type":["string","null"]},"locale":{"type":["string","null"]}},"required":["id","email","name","country","locale"]},"workspace":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"balance":{"type":"number"}},"required":["id","name","balance"]},"plan":{"anyOf":[{"type":"object","properties":{"id":{"type":"string"},"slug":{"type":"string"},"name":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"string"}},"credits":{"type":"number"},"monthlyUsd":{"type":"number"}},"required":["id","slug","name","credits","monthlyUsd"]},{"type":"null"}]},"interval":{"type":["string","null"]},"paidAt":{"type":["string","null"]},"minutesToCancel":{"description":"From the first payment to the cancellation","type":["number","null"]},"periodEnd":{"description":"When the plan ends (only while it is still ending)","type":["string","null"]},"outcome":{"type":"string","enum":["ending","ended","kept","returned","deleted"],"description":"ending: still live and set to cancel; ended; kept: the cancellation was undone; returned: subscribed again; deleted: account deleted"},"resumedAt":{"type":["string","null"]},"resumedFrom":{"type":["string","null"]},"retentionOffer":{"anyOf":[{"type":"object","properties":{"status":{"type":"string"},"percent":{"type":"number"},"source":{"type":["string","null"]}},"required":["status","percent","source"]},{"type":"null"}]},"usage":{"type":"object","properties":{"creditsUsed":{"type":"number"},"generations":{"type":"number"},"usedPercent":{"type":["number","null"]}},"required":["creditsUsed","generations","usedPercent"]},"winback":{"anyOf":[{"type":"object","properties":{"sentAt":{"type":"string"},"openedAt":{"type":["string","null"]},"clickedAt":{"type":["string","null"]}},"required":["sentAt","openedAt","clickedAt"]},{"type":"null"}]},"manualEmails":{"type":"number"},"lastEmailAt":{"type":["string","null"]},"contactedAt":{"type":["string","null"]},"notes":{"type":"array","items":{"type":"object","properties":{"at":{"type":"string"},"by":{"type":"string"},"byName":{"type":["string","null"]},"text":{"type":"string"}},"required":["at","by","byName","text"]}}},"required":["id","createdAt","reason","comment","declinedOffer","user","workspace","plan","interval","paidAt","minutesToCancel","periodEnd","outcome","resumedAt","resumedFrom","retentionOffer","usage","winback","manualEmails","lastEmailAt","contactedAt","notes"]}},"nextCursor":{"type":["string","null"]}},"required":["items","nextCursor"]},"example":{"items":[{"id":"01990000-0000-7000-8000-000000000001","createdAt":"2026-09-19T12:00:00.000Z","reason":"example","comment":"example","declinedOffer":"example","user":{"id":"example","email":"example","name":"Noura","country":"example","locale":"ar-SA"},"workspace":{"id":"example","name":"Noura","balance":1},"plan":{"id":"example","slug":"example","name":{},"credits":1,"monthlyUsd":1},"interval":"example","paidAt":"2026-09-19T12:00:00.000Z","minutesToCancel":"example","periodEnd":"2026-09-19T12:00:00.000Z","outcome":"ending","resumedAt":"2026-09-19T12:00:00.000Z","resumedFrom":"example","retentionOffer":{"status":"example","percent":1,"source":"example"},"usage":{"creditsUsed":1,"generations":1,"usedPercent":"example"},"winback":{"sentAt":"2026-09-19T12:00:00.000Z","openedAt":"2026-09-19T12:00:00.000Z","clickedAt":"2026-09-19T12:00:00.000Z"},"manualEmails":1,"lastEmailAt":"2026-09-19T12:00:00.000Z","contactedAt":"2026-09-19T12:00:00.000Z","notes":[{"at":"example","by":"example","byName":"example","text":"مرحباً بك في فوكلا."}]}],"nextCursor":"example"}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/cancellations","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/cancellations","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/cancellations","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/cancellations","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/cancellations","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/cancellations","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/cancellations","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/cancellations","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/cancellations","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/cancellations","traceId":"request-id"}}}}}}},"/v1/admin/cancellations/stats":{"get":{"operationId":"adminCancellationStats","tags":["Admin"],"summary":"Cancel rate, outcomes, reasons, timing, usage, offers, win-back and revenue for a date range","description":"Requires admin permission billing.read. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"q","in":"query","required":false,"schema":{"type":"string","maxLength":200}},{"name":"reason","in":"query","required":false,"schema":{"type":"string","maxLength":60}},{"name":"from","in":"query","required":false,"schema":{"type":"string","format":"date","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])))$"}},{"name":"to","in":"query","required":false,"schema":{"type":"string","format":"date","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])))$"}}],"security":[{"session":[]},{"apiKey":[]}],"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"total":{"type":"number"},"newPaid":{"type":"number"},"cancelRate":{"description":"Cancellations per 100 new paid subscriptions in the range","type":["number","null"]},"outcomes":{"type":"object","propertyNames":{"type":"string","enum":["ending","ended","kept","returned","deleted"]},"additionalProperties":{"type":"number"},"required":["ending","ended","kept","returned","deleted"]},"savedRate":{"type":["number","null"]},"savedInFlow":{"type":"number","description":"Took the 20% offer in the cancel flow instead of cancelling"},"offerRefunds":{"type":"number"},"reasons":{"type":"array","items":{"type":"object","properties":{"reason":{"type":"string"},"count":{"type":"number"}},"required":["reason","count"]}},"plans":{"type":"array","items":{"type":"object","properties":{"plan":{"type":"string"},"count":{"type":"number"}},"required":["plan","count"]}},"declinedOffers":{"type":"array","items":{"type":"object","properties":{"offer":{"type":"string"},"count":{"type":"number"}},"required":["offer","count"]}},"timing":{"type":"object","properties":{"under1h":{"type":"number"},"under1d":{"type":"number"},"under7d":{"type":"number"},"over7d":{"type":"number"},"medianMinutes":{"type":["number","null"]}},"required":["under1h","under1d","under7d","over7d","medianMinutes"]},"usage":{"type":"object","properties":{"medianUsedPercent":{"type":["number","null"]},"ranOut":{"type":"number"},"unused":{"type":"number"}},"required":["medianUsedPercent","ranOut","unused"]},"winback":{"type":"object","properties":{"sent":{"type":"number"},"opened":{"type":"number"},"clicked":{"type":"number"},"kept":{"type":"number"}},"required":["sent","opened","clicked","kept"]},"revenue":{"type":"object","properties":{"lostMrr":{"type":"number"},"atRiskMrr":{"type":"number"},"savedMrr":{"type":"number"}},"required":["lostMrr","atRiskMrr","savedMrr"]},"weekly":{"type":"array","items":{"type":"object","properties":{"week":{"type":"string"},"cancellations":{"type":"number"},"newPaid":{"type":"number"}},"required":["week","cancellations","newPaid"]}}},"required":["total","newPaid","cancelRate","outcomes","savedRate","savedInFlow","offerRefunds","reasons","plans","declinedOffers","timing","usage","winback","revenue","weekly"]},"example":{"total":1,"newPaid":1,"cancelRate":"example","outcomes":{},"savedRate":"example","savedInFlow":1,"offerRefunds":1,"reasons":[{"reason":"example","count":1}],"plans":[{"plan":"example","count":1}],"declinedOffers":[{"offer":"example","count":1}],"timing":{"under1h":1,"under1d":1,"under7d":1,"over7d":1,"medianMinutes":"example"},"usage":{"medianUsedPercent":"example","ranOut":1,"unused":1},"winback":{"sent":1,"opened":1,"clicked":1,"kept":1},"revenue":{"lostMrr":1,"atRiskMrr":1,"savedMrr":1},"weekly":[{"week":"example","cancellations":1,"newPaid":1}]}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/cancellations/stats","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/cancellations/stats","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/cancellations/stats","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/cancellations/stats","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/cancellations/stats","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/cancellations/stats","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/cancellations/stats","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/cancellations/stats","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/cancellations/stats","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/cancellations/stats","traceId":"request-id"}}}}}}},"/v1/admin/cancellations/{id}":{"get":{"operationId":"adminGetCancellation","tags":["Admin"],"summary":"admin Get Cancellation","description":"Requires admin permission billing.read. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","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)$"},"createdAt":{"type":"string"},"reason":{"type":"string"},"comment":{"type":["string","null"]},"declinedOffer":{"type":["string","null"]},"user":{"type":"object","properties":{"id":{"type":["string","null"]},"email":{"type":["string","null"]},"name":{"type":["string","null"]},"country":{"type":["string","null"]},"locale":{"type":["string","null"]}},"required":["id","email","name","country","locale"]},"workspace":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"balance":{"type":"number"}},"required":["id","name","balance"]},"plan":{"anyOf":[{"type":"object","properties":{"id":{"type":"string"},"slug":{"type":"string"},"name":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"string"}},"credits":{"type":"number"},"monthlyUsd":{"type":"number"}},"required":["id","slug","name","credits","monthlyUsd"]},{"type":"null"}]},"interval":{"type":["string","null"]},"paidAt":{"type":["string","null"]},"minutesToCancel":{"description":"From the first payment to the cancellation","type":["number","null"]},"periodEnd":{"description":"When the plan ends (only while it is still ending)","type":["string","null"]},"outcome":{"type":"string","enum":["ending","ended","kept","returned","deleted"],"description":"ending: still live and set to cancel; ended; kept: the cancellation was undone; returned: subscribed again; deleted: account deleted"},"resumedAt":{"type":["string","null"]},"resumedFrom":{"type":["string","null"]},"retentionOffer":{"anyOf":[{"type":"object","properties":{"status":{"type":"string"},"percent":{"type":"number"},"source":{"type":["string","null"]}},"required":["status","percent","source"]},{"type":"null"}]},"usage":{"type":"object","properties":{"creditsUsed":{"type":"number"},"generations":{"type":"number"},"usedPercent":{"type":["number","null"]}},"required":["creditsUsed","generations","usedPercent"]},"winback":{"anyOf":[{"type":"object","properties":{"sentAt":{"type":"string"},"openedAt":{"type":["string","null"]},"clickedAt":{"type":["string","null"]}},"required":["sentAt","openedAt","clickedAt"]},{"type":"null"}]},"manualEmails":{"type":"number"},"lastEmailAt":{"type":["string","null"]},"contactedAt":{"type":["string","null"]},"notes":{"type":"array","items":{"type":"object","properties":{"at":{"type":"string"},"by":{"type":"string"},"byName":{"type":["string","null"]},"text":{"type":"string"}},"required":["at","by","byName","text"]}}},"required":["id","createdAt","reason","comment","declinedOffer","user","workspace","plan","interval","paidAt","minutesToCancel","periodEnd","outcome","resumedAt","resumedFrom","retentionOffer","usage","winback","manualEmails","lastEmailAt","contactedAt","notes"]},"example":{"id":"01990000-0000-7000-8000-000000000001","createdAt":"2026-09-19T12:00:00.000Z","reason":"example","comment":"example","declinedOffer":"example","user":{"id":"example","email":"example","name":"Noura","country":"example","locale":"ar-SA"},"workspace":{"id":"example","name":"Noura","balance":1},"plan":{"id":"example","slug":"example","name":{},"credits":1,"monthlyUsd":1},"interval":"example","paidAt":"2026-09-19T12:00:00.000Z","minutesToCancel":"example","periodEnd":"2026-09-19T12:00:00.000Z","outcome":"ending","resumedAt":"2026-09-19T12:00:00.000Z","resumedFrom":"example","retentionOffer":{"status":"example","percent":1,"source":"example"},"usage":{"creditsUsed":1,"generations":1,"usedPercent":"example"},"winback":{"sentAt":"2026-09-19T12:00:00.000Z","openedAt":"2026-09-19T12:00:00.000Z","clickedAt":"2026-09-19T12:00:00.000Z"},"manualEmails":1,"lastEmailAt":"2026-09-19T12:00:00.000Z","contactedAt":"2026-09-19T12:00:00.000Z","notes":[{"at":"example","by":"example","byName":"example","text":"مرحباً بك في فوكلا."}]}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/cancellations/{id}","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/cancellations/{id}","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/cancellations/{id}","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/cancellations/{id}","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/cancellations/{id}","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/cancellations/{id}","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/cancellations/{id}","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/cancellations/{id}","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/cancellations/{id}","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/cancellations/{id}","traceId":"request-id"}}}}}}},"/v1/admin/cancellations/{id}/keep":{"post":{"operationId":"adminKeepCancellation","tags":["Admin"],"summary":"Undo the cancellation for the customer (their plan renews again), optionally with the one-time 20% offer; audited","description":"Requires admin permission billing.write. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"X-CSRF-Token","in":"header","required":false,"description":"Required for cookie-authenticated mutations; returned by sign-in/sign-up.","schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"offer":{"default":false,"type":"boolean"},"reason":{"type":"string","minLength":1,"maxLength":1000}}},"example":{"offer":false,"reason":"example"}}}},"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"resumed":{"type":"boolean","description":"A scheduled cancellation was undone: the plan renews again"},"offer":{"anyOf":[{"type":"object","properties":{"percent":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"renewsAt":{"type":"string","description":"The renewal it applies to: charged in full, then `percent` refunded"}},"required":["percent","renewsAt"]},{"type":"null"}],"description":"The retention offer granted now (null: not asked for, or already used by this workspace)"},"cancellation":{"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)$"},"createdAt":{"type":"string"},"reason":{"type":"string"},"comment":{"type":["string","null"]},"declinedOffer":{"type":["string","null"]},"user":{"type":"object","properties":{"id":{"type":["string","null"]},"email":{"type":["string","null"]},"name":{"type":["string","null"]},"country":{"type":["string","null"]},"locale":{"type":["string","null"]}},"required":["id","email","name","country","locale"]},"workspace":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"balance":{"type":"number"}},"required":["id","name","balance"]},"plan":{"anyOf":[{"type":"object","properties":{"id":{"type":"string"},"slug":{"type":"string"},"name":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"string"}},"credits":{"type":"number"},"monthlyUsd":{"type":"number"}},"required":["id","slug","name","credits","monthlyUsd"]},{"type":"null"}]},"interval":{"type":["string","null"]},"paidAt":{"type":["string","null"]},"minutesToCancel":{"description":"From the first payment to the cancellation","type":["number","null"]},"periodEnd":{"description":"When the plan ends (only while it is still ending)","type":["string","null"]},"outcome":{"type":"string","enum":["ending","ended","kept","returned","deleted"],"description":"ending: still live and set to cancel; ended; kept: the cancellation was undone; returned: subscribed again; deleted: account deleted"},"resumedAt":{"type":["string","null"]},"resumedFrom":{"type":["string","null"]},"retentionOffer":{"anyOf":[{"type":"object","properties":{"status":{"type":"string"},"percent":{"type":"number"},"source":{"type":["string","null"]}},"required":["status","percent","source"]},{"type":"null"}]},"usage":{"type":"object","properties":{"creditsUsed":{"type":"number"},"generations":{"type":"number"},"usedPercent":{"type":["number","null"]}},"required":["creditsUsed","generations","usedPercent"]},"winback":{"anyOf":[{"type":"object","properties":{"sentAt":{"type":"string"},"openedAt":{"type":["string","null"]},"clickedAt":{"type":["string","null"]}},"required":["sentAt","openedAt","clickedAt"]},{"type":"null"}]},"manualEmails":{"type":"number"},"lastEmailAt":{"type":["string","null"]},"contactedAt":{"type":["string","null"]},"notes":{"type":"array","items":{"type":"object","properties":{"at":{"type":"string"},"by":{"type":"string"},"byName":{"type":["string","null"]},"text":{"type":"string"}},"required":["at","by","byName","text"]}}},"required":["id","createdAt","reason","comment","declinedOffer","user","workspace","plan","interval","paidAt","minutesToCancel","periodEnd","outcome","resumedAt","resumedFrom","retentionOffer","usage","winback","manualEmails","lastEmailAt","contactedAt","notes"]}},"required":["resumed","offer","cancellation"]},"example":{"resumed":true,"offer":{"percent":-9007199254740991,"renewsAt":"2026-09-19T12:00:00.000Z"},"cancellation":{"id":"01990000-0000-7000-8000-000000000001","createdAt":"2026-09-19T12:00:00.000Z","reason":"example","comment":"example","declinedOffer":"example","user":{"id":"example","email":"example","name":"Noura","country":"example","locale":"ar-SA"},"workspace":{"id":"example","name":"Noura","balance":1},"plan":{"id":"example","slug":"example","name":{},"credits":1,"monthlyUsd":1},"interval":"example","paidAt":"2026-09-19T12:00:00.000Z","minutesToCancel":"example","periodEnd":"2026-09-19T12:00:00.000Z","outcome":"ending","resumedAt":"2026-09-19T12:00:00.000Z","resumedFrom":"example","retentionOffer":{"status":"example","percent":1,"source":"example"},"usage":{"creditsUsed":1,"generations":1,"usedPercent":"example"},"winback":{"sentAt":"2026-09-19T12:00:00.000Z","openedAt":"2026-09-19T12:00:00.000Z","clickedAt":"2026-09-19T12:00:00.000Z"},"manualEmails":1,"lastEmailAt":"2026-09-19T12:00:00.000Z","contactedAt":"2026-09-19T12:00:00.000Z","notes":[{"at":"example","by":"example","byName":"example","text":"مرحباً بك في فوكلا."}]}}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/cancellations/{id}/keep","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/cancellations/{id}/keep","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/cancellations/{id}/keep","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/cancellations/{id}/keep","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/cancellations/{id}/keep","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/cancellations/{id}/keep","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/cancellations/{id}/keep","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/cancellations/{id}/keep","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/cancellations/{id}/keep","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/cancellations/{id}/keep","traceId":"request-id"}}}}}}},"/v1/admin/cancellations/{id}/note":{"post":{"operationId":"adminNoteCancellation","tags":["Admin"],"summary":"Add a support note and/or mark the customer contacted; audited","description":"Requires admin permission billing.read. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"X-CSRF-Token","in":"header","required":false,"description":"Required for cookie-authenticated mutations; returned by sign-in/sign-up.","schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"text":{"type":"string","maxLength":2000},"contacted":{"type":"boolean"}}},"example":{"text":"مرحباً بك في فوكلا.","contacted":true}}}},"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","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)$"},"createdAt":{"type":"string"},"reason":{"type":"string"},"comment":{"type":["string","null"]},"declinedOffer":{"type":["string","null"]},"user":{"type":"object","properties":{"id":{"type":["string","null"]},"email":{"type":["string","null"]},"name":{"type":["string","null"]},"country":{"type":["string","null"]},"locale":{"type":["string","null"]}},"required":["id","email","name","country","locale"]},"workspace":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"balance":{"type":"number"}},"required":["id","name","balance"]},"plan":{"anyOf":[{"type":"object","properties":{"id":{"type":"string"},"slug":{"type":"string"},"name":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"string"}},"credits":{"type":"number"},"monthlyUsd":{"type":"number"}},"required":["id","slug","name","credits","monthlyUsd"]},{"type":"null"}]},"interval":{"type":["string","null"]},"paidAt":{"type":["string","null"]},"minutesToCancel":{"description":"From the first payment to the cancellation","type":["number","null"]},"periodEnd":{"description":"When the plan ends (only while it is still ending)","type":["string","null"]},"outcome":{"type":"string","enum":["ending","ended","kept","returned","deleted"],"description":"ending: still live and set to cancel; ended; kept: the cancellation was undone; returned: subscribed again; deleted: account deleted"},"resumedAt":{"type":["string","null"]},"resumedFrom":{"type":["string","null"]},"retentionOffer":{"anyOf":[{"type":"object","properties":{"status":{"type":"string"},"percent":{"type":"number"},"source":{"type":["string","null"]}},"required":["status","percent","source"]},{"type":"null"}]},"usage":{"type":"object","properties":{"creditsUsed":{"type":"number"},"generations":{"type":"number"},"usedPercent":{"type":["number","null"]}},"required":["creditsUsed","generations","usedPercent"]},"winback":{"anyOf":[{"type":"object","properties":{"sentAt":{"type":"string"},"openedAt":{"type":["string","null"]},"clickedAt":{"type":["string","null"]}},"required":["sentAt","openedAt","clickedAt"]},{"type":"null"}]},"manualEmails":{"type":"number"},"lastEmailAt":{"type":["string","null"]},"contactedAt":{"type":["string","null"]},"notes":{"type":"array","items":{"type":"object","properties":{"at":{"type":"string"},"by":{"type":"string"},"byName":{"type":["string","null"]},"text":{"type":"string"}},"required":["at","by","byName","text"]}}},"required":["id","createdAt","reason","comment","declinedOffer","user","workspace","plan","interval","paidAt","minutesToCancel","periodEnd","outcome","resumedAt","resumedFrom","retentionOffer","usage","winback","manualEmails","lastEmailAt","contactedAt","notes"]},"example":{"id":"01990000-0000-7000-8000-000000000001","createdAt":"2026-09-19T12:00:00.000Z","reason":"example","comment":"example","declinedOffer":"example","user":{"id":"example","email":"example","name":"Noura","country":"example","locale":"ar-SA"},"workspace":{"id":"example","name":"Noura","balance":1},"plan":{"id":"example","slug":"example","name":{},"credits":1,"monthlyUsd":1},"interval":"example","paidAt":"2026-09-19T12:00:00.000Z","minutesToCancel":"example","periodEnd":"2026-09-19T12:00:00.000Z","outcome":"ending","resumedAt":"2026-09-19T12:00:00.000Z","resumedFrom":"example","retentionOffer":{"status":"example","percent":1,"source":"example"},"usage":{"creditsUsed":1,"generations":1,"usedPercent":"example"},"winback":{"sentAt":"2026-09-19T12:00:00.000Z","openedAt":"2026-09-19T12:00:00.000Z","clickedAt":"2026-09-19T12:00:00.000Z"},"manualEmails":1,"lastEmailAt":"2026-09-19T12:00:00.000Z","contactedAt":"2026-09-19T12:00:00.000Z","notes":[{"at":"example","by":"example","byName":"example","text":"مرحباً بك في فوكلا."}]}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/cancellations/{id}/note","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/cancellations/{id}/note","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/cancellations/{id}/note","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/cancellations/{id}/note","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/cancellations/{id}/note","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/cancellations/{id}/note","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/cancellations/{id}/note","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/cancellations/{id}/note","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/cancellations/{id}/note","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/cancellations/{id}/note","traceId":"request-id"}}}}}}},"/v1/admin/payment-failures":{"get":{"operationId":"adminPaymentFailures","tags":["Admin"],"summary":"Customers whose payment was declined (one row per workspace): what they tried to buy, why, how they paid, whether they paid since, follow-up","description":"Requires admin permission billing.read. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"q","in":"query","required":false,"schema":{"type":"string","maxLength":200}},{"name":"status","in":"query","required":false,"schema":{"type":"string","enum":["open","recovered"]}},{"name":"kind","in":"query","required":false,"schema":{"type":"string","enum":["first","renewal","topup"]}},{"name":"code","in":"query","required":false,"schema":{"type":"string","maxLength":80}},{"name":"from","in":"query","required":false,"schema":{"type":"string","format":"date","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])))$"}},{"name":"to","in":"query","required":false,"schema":{"type":"string","format":"date","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])))$"}},{"name":"cursor","in":"query","required":false,"schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","minimum":1,"maximum":200}}],"security":[{"session":[]},{"apiKey":[]}],"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"items":{"type":"array","items":{"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)$"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"},"data":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}}},"required":["id","createdAt","updatedAt"],"additionalProperties":{}}},"nextCursor":{"type":["string","null"]}},"required":["items","nextCursor"]},"example":{"items":[{"id":"01990000-0000-7000-8000-000000000001","createdAt":"2026-09-19T12:00:00.000Z","updatedAt":"2026-09-19T12:00:00.000Z","data":{}}],"nextCursor":"example"}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/payment-failures","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/payment-failures","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/payment-failures","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/payment-failures","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/payment-failures","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/payment-failures","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/payment-failures","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/payment-failures","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/payment-failures","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/payment-failures","traceId":"request-id"}}}}}}},"/v1/admin/payment-failures/stats":{"get":{"operationId":"adminPaymentFailureStats","tags":["Admin"],"summary":"Success and recovery rates, money at stake, decline reasons, payment methods, cards, countries and a weekly chart","description":"Requires admin permission billing.read. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"q","in":"query","required":false,"schema":{"type":"string","maxLength":200}},{"name":"status","in":"query","required":false,"schema":{"type":"string","enum":["open","recovered"]}},{"name":"kind","in":"query","required":false,"schema":{"type":"string","enum":["first","renewal","topup"]}},{"name":"code","in":"query","required":false,"schema":{"type":"string","maxLength":80}},{"name":"from","in":"query","required":false,"schema":{"type":"string","format":"date","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])))$"}},{"name":"to","in":"query","required":false,"schema":{"type":"string","format":"date","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])))$"}}],"security":[{"session":[]},{"apiKey":[]}],"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"customers":{"type":"number"},"failures":{"type":"number"},"succeeded":{"type":"number"},"successRate":{"description":"Successful payments out of all payment attempts in the range (%)","type":["number","null"]},"recovered":{"type":"number"},"recoveryRate":{"type":["number","null"]},"medianHoursToRecover":{"type":["number","null"]},"openMrr":{"type":"number"},"recoveredMrr":{"type":"number"},"retried":{"type":"number"},"contacted":{"type":"number"},"kinds":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string"},"count":{"type":"number"}},"required":["key","count"]}},"codes":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string"},"count":{"type":"number"}},"required":["key","count"]}},"methods":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string"},"count":{"type":"number"}},"required":["key","count"]}},"networks":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string"},"count":{"type":"number"}},"required":["key","count"]}},"countries":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string"},"count":{"type":"number"}},"required":["key","count"]}},"currencies":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string"},"count":{"type":"number"}},"required":["key","count"]}},"plans":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string"},"count":{"type":"number"}},"required":["key","count"]}},"weekly":{"type":"array","items":{"type":"object","properties":{"week":{"type":"string"},"failed":{"type":"number"},"succeeded":{"type":"number"}},"required":["week","failed","succeeded"]}}},"required":["customers","failures","succeeded","successRate","recovered","recoveryRate","medianHoursToRecover","openMrr","recoveredMrr","retried","contacted","kinds","codes","methods","networks","countries","currencies","plans","weekly"]},"example":{"customers":1,"failures":1,"succeeded":1,"successRate":"example","recovered":1,"recoveryRate":"example","medianHoursToRecover":"example","openMrr":1,"recoveredMrr":1,"retried":1,"contacted":1,"kinds":[{"key":"example","count":1}],"codes":[{"key":"example","count":1}],"methods":[{"key":"example","count":1}],"networks":[{"key":"example","count":1}],"countries":[{"key":"example","count":1}],"currencies":[{"key":"example","count":1}],"plans":[{"key":"example","count":1}],"weekly":[{"week":"example","failed":1,"succeeded":1}]}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/payment-failures/stats","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/payment-failures/stats","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/payment-failures/stats","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/payment-failures/stats","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/payment-failures/stats","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/payment-failures/stats","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/payment-failures/stats","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/payment-failures/stats","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/payment-failures/stats","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/payment-failures/stats","traceId":"request-id"}}}}}}},"/v1/admin/payment-failures/{id}/note":{"post":{"operationId":"adminNotePaymentFailure","tags":["Admin"],"summary":"A support note and/or \"contacted\" on a workspace with failed payments; audited","description":"Requires admin permission billing.read. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"X-CSRF-Token","in":"header","required":false,"description":"Required for cookie-authenticated mutations; returned by sign-in/sign-up.","schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"text":{"type":"string","maxLength":2000},"contacted":{"type":"boolean"}}},"example":{"text":"مرحباً بك في فوكلا.","contacted":true}}}},"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","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)$"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"},"data":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}}},"required":["id","createdAt","updatedAt"],"additionalProperties":{}},"example":{"id":"01990000-0000-7000-8000-000000000001","createdAt":"2026-09-19T12:00:00.000Z","updatedAt":"2026-09-19T12:00:00.000Z","data":{}}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/payment-failures/{id}/note","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/payment-failures/{id}/note","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/payment-failures/{id}/note","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/payment-failures/{id}/note","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/payment-failures/{id}/note","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/payment-failures/{id}/note","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/payment-failures/{id}/note","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/payment-failures/{id}/note","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/payment-failures/{id}/note","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/payment-failures/{id}/note","traceId":"request-id"}}}}}}},"/v1/admin/generations/summary":{"get":{"operationId":"adminGenerationsSummary","tags":["Admin"],"summary":"Counts by type and status, failure rate and top error codes for the same filters","description":"Requires admin permission generations.read. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"q","in":"query","required":false,"schema":{"description":"User email or name, workspace name, or generation id","type":"string","maxLength":200}},{"name":"type","in":"query","required":false,"schema":{"type":"string","enum":["tts","voice-change","music","sfx","clean","dub","lyric-edit","voice-design","assistant","dialogue","captions","video","transcript","auto-tags","image","cartoon"],"description":"`cartoon` = Cartoon studio renders (video generations with input.kind cartoon); `video` excludes them"}},{"name":"status","in":"query","required":false,"schema":{"type":"string","enum":["queued","running","succeeded","failed","cancelled"]}},{"name":"userId","in":"query","required":false,"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)$"}},{"name":"workspaceId","in":"query","required":false,"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)$"}},{"name":"from","in":"query","required":false,"schema":{"description":"First day (inclusive)","type":"string","format":"date","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])))$"}},{"name":"to","in":"query","required":false,"schema":{"description":"Last day (inclusive)","type":"string","format":"date","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])))$"}},{"name":"failedOnly","in":"query","required":false,"schema":{"type":"string"}},{"name":"clonesOnly","in":"query","required":false,"schema":{"description":"Only generations voiced with a cloned voice","type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"total":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"failed":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"succeeded":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"failureRate":{"type":"number","description":"failed / (succeeded + failed); 0 when nothing finished"},"creditsCharged":{"type":"number"},"cost":{"type":"object","properties":{"totalUsd":{"type":"number"},"audioUsd":{"type":"number"},"videoUsd":{"type":"number"},"otherUsd":{"type":"number"},"byCapability":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"number"},"description":"USD per voice-engine capability"},"calls":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"chargedUsd":{"type":"number","description":"Credits charged × $ per credit (cheapest top-up pack)"},"margin":{"description":"chargedUsd ÷ totalUsd; null without cost","type":["number","null"]},"dollarsPerCredit":{"type":"number"},"warningMargin":{"type":"number","description":"Margins below this are flagged"}},"required":["totalUsd","audioUsd","videoUsd","otherUsd","byCapability","calls","chargedUsd","margin","dollarsPerCredit","warningMargin"]},"byType":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string"},"count":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"failed":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}},"required":["type","count","failed"]}},"byStatus":{"type":"array","items":{"type":"object","properties":{"status":{"type":"string"},"count":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}},"required":["status","count"]}},"topErrors":{"type":"array","items":{"type":"object","properties":{"code":{"type":"string"},"count":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}},"required":["code","count"]}}},"required":["total","failed","succeeded","failureRate","creditsCharged","cost","byType","byStatus","topErrors"]},"example":{"total":-9007199254740991,"failed":-9007199254740991,"succeeded":-9007199254740991,"failureRate":1,"creditsCharged":1,"cost":{"totalUsd":1,"audioUsd":1,"videoUsd":1,"otherUsd":1,"byCapability":{},"calls":-9007199254740991,"chargedUsd":1,"margin":"example","dollarsPerCredit":1,"warningMargin":1},"byType":[{"type":"example","count":-9007199254740991,"failed":-9007199254740991}],"byStatus":[{"status":"example","count":-9007199254740991}],"topErrors":[{"code":"example","count":-9007199254740991}]}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/generations/summary","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/generations/summary","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/generations/summary","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/generations/summary","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/generations/summary","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/generations/summary","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/generations/summary","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/generations/summary","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/generations/summary","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/generations/summary","traceId":"request-id"}}}}}}},"/v1/admin/generations/{id}":{"get":{"operationId":"adminGetGeneration","tags":["Admin"],"summary":"Full input, params, every signed download (15 minutes), provider calls and the error; audit-logged","description":"Requires admin permission generations.read. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","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)$"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"},"type":{"type":"string"},"status":{"type":"string"},"progress":{"type":"number"},"errorCode":{"type":["string","null"]},"creditsReserved":{"type":"number"},"creditsCharged":{"type":"number"},"costUsd":{"type":"number","description":"Provider cost (USD) of the calls metered against this generation (= cost.totalUsd)"},"cost":{"type":"object","properties":{"totalUsd":{"type":"number"},"audioUsd":{"type":"number"},"videoUsd":{"type":"number"},"otherUsd":{"type":"number"},"byCapability":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"number"},"description":"USD per voice-engine capability"},"calls":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"chargedUsd":{"type":"number","description":"Credits charged × $ per credit (cheapest top-up pack)"},"margin":{"description":"chargedUsd ÷ totalUsd; null without cost","type":["number","null"]}},"required":["totalUsd","audioUsd","videoUsd","otherUsd","byCapability","calls","chargedUsd","margin"]},"video":{"description":"Video renders only","type":"object","properties":{"projectId":{"anyOf":[{"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)$"},{"type":"null"}]},"cartoonProjectId":{"anyOf":[{"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)$"},{"type":"null"}]},"seconds":{"type":"number"},"renderSeconds":{"type":"number"},"tier":{"type":["string","null"]},"aspectRatio":{"type":["string","null"]},"resolution":{"type":["string","null"]}},"required":["projectId","cartoonProjectId","seconds","renderSeconds","tier","aspectRatio","resolution"]},"duration":{"description":"Output length in seconds","type":["number","null"]},"locale":{"type":"string"},"dialect":{"type":["string","null"]},"model":{"anyOf":[{"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)$"},"slug":{"type":"string"},"name":{"anyOf":[{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"string"}},{"type":"null"}]}},"required":["id","slug","name"]},{"type":"null"}]},"voice":{"anyOf":[{"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)$"},"name":{"anyOf":[{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"string"}},{"type":"null"}]},"engine":{"type":["string","null"]},"isClone":{"type":"boolean"},"cloneStatus":{"type":["string","null"]}},"required":["id","name","engine","isClone","cloneStatus"]},{"type":"null"}]},"input":{"type":"object","properties":{"text":{"type":"string","description":"Script, dialogue lines, prompt/lyrics or source file name, cut at 500 characters"},"truncated":{"type":"boolean"},"length":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"title":{"type":["string","null"]},"sourceName":{"type":["string","null"]},"lines":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]}},"required":["text","truncated","length","title","sourceName","lines"]},"user":{"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)$"},"email":{"type":"string"},"name":{"type":"string"},"role":{"type":"string"}},"required":["id","email","name","role"]},"workspace":{"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)$"},"name":{"type":"string"},"planSlug":{"type":["string","null"]}},"required":["id","name","planSlug"]},"output":{"anyOf":[{"type":"object","properties":{"kind":{"type":"string","enum":["audio","video","image"]},"format":{"type":"string"},"url":{"type":"string"},"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":["kind","format","url","expiresAt"]},{"type":"null"}]},"images":{"description":"Image runs only: input and output pictures, signed for 15 minutes","anyOf":[{"type":"object","properties":{"mode":{"type":["string","null"]},"inputs":{"type":"array","items":{"type":"object","properties":{"url":{"type":"string"},"name":{"type":["string","null"]}},"required":["url","name"]},"description":"The photos the person gave (the earlier image being edited first, then the uploads)"},"outputs":{"type":"array","items":{"type":"object","properties":{"url":{"type":"string"},"thumbUrl":{"type":["string","null"]},"width":{"type":["number","null"]},"height":{"type":["number","null"]}},"required":["url","thumbUrl","width","height"]}},"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":["mode","inputs","outputs","expiresAt"]},{"type":"null"}]},"pictures":{"type":"array","items":{"type":"object","properties":{"kind":{"type":"string","enum":["photo","product","sheet","still","endStill"]},"label":{"description":"Scene number, shot or character name","type":["string","null"]},"url":{"type":"string"}},"required":["kind","label","url"]},"description":"Video and cartoon renders: every picture behind it (the photos the person gave, character sheets, scene stills, end stills), signed for 15 minutes; empty otherwise"},"source":{"anyOf":[{"type":"object","properties":{"kind":{"type":"string","enum":["audio","video"]},"url":{"type":"string"},"name":{"type":["string","null"]},"contentType":{"type":["string","null"]},"duration":{"type":["number","null"]},"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":["kind","url","name","contentType","duration","expiresAt"]},{"type":"null"}],"description":"The file the person uploaded as the input (voice changer, voice cleaner and the like), signed like the output; null when there was none or it is no longer stored"},"inputText":{"type":"string"},"inputData":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}},"params":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}},"dialogue":{"anyOf":[{"type":"array","items":{"type":"object","properties":{"speaker":{"type":"string"},"text":{"type":"string"},"voiceId":{"type":["string","null"]}},"required":["speaker","text","voiceId"]}},{"type":"null"}]},"downloads":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"string"}},"downloadsExpireAt":{"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))$"},"providerCalls":{"type":"array","items":{"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)$"},"createdAt":{"type":"string"},"capability":{"type":["string","null"]},"group":{"type":"string","enum":["audio","video","other"]},"provider":{"type":"string"},"model":{"type":"string"},"latencyMs":{"type":"number"},"costUsd":{"type":"number"},"units":{},"errorCode":{"type":["string","null"]},"jobId":{"type":"string"},"role":{"description":"Binding role: 'fallback' when a video tier's fallback model made the call","type":["string","null"]}},"required":["id","createdAt","capability","group","provider","model","latencyMs","costUsd","units","errorCode","jobId"]}},"error":{"anyOf":[{"type":"object","properties":{"code":{"type":"string"},"providerErrors":{"type":"array","items":{"type":"string"}}},"required":["code","providerErrors"]},{"type":"null"}]}},"required":["id","createdAt","updatedAt","type","status","progress","errorCode","creditsReserved","creditsCharged","costUsd","cost","duration","locale","dialect","model","voice","input","user","workspace","output","pictures","source","inputText","inputData","params","dialogue","downloads","downloadsExpireAt","providerCalls","error"]},"example":{"id":"01990000-0000-7000-8000-000000000001","createdAt":"2026-09-19T12:00:00.000Z","updatedAt":"2026-09-19T12:00:00.000Z","type":"example","status":"example","progress":1,"errorCode":"example","creditsReserved":1,"creditsCharged":1,"costUsd":1,"cost":{"totalUsd":1,"audioUsd":1,"videoUsd":1,"otherUsd":1,"byCapability":{},"calls":-9007199254740991,"chargedUsd":1,"margin":"example"},"video":{"projectId":"01990000-0000-7000-8000-000000000001","cartoonProjectId":"01990000-0000-7000-8000-000000000001","seconds":1,"renderSeconds":1,"tier":"example","aspectRatio":"example","resolution":"example"},"duration":"example","locale":"ar-SA","dialect":"ar-SA","model":{"id":"01990000-0000-7000-8000-000000000001","slug":"example","name":{}},"voice":{"id":"01990000-0000-7000-8000-000000000001","name":{},"engine":"example","isClone":true,"cloneStatus":"example"},"input":{"text":"مرحباً بك في فوكلا.","truncated":true,"length":-9007199254740991,"title":"example","sourceName":"example","lines":-9007199254740991},"user":{"id":"01990000-0000-7000-8000-000000000001","email":"example","name":"Noura","role":"example"},"workspace":{"id":"01990000-0000-7000-8000-000000000001","name":"Noura","planSlug":"example"},"output":{"kind":"audio","format":"example","url":"example","expiresAt":"2026-09-19T12:00:00.000Z"},"images":{"mode":"example","inputs":[{"url":"example","name":"Noura"}],"outputs":[{"url":"example","thumbUrl":"http://localhost:4000/example","width":"example","height":"example"}],"expiresAt":"2026-09-19T12:00:00.000Z"},"pictures":[{"kind":"photo","label":"example","url":"example"}],"source":{"kind":"audio","url":"example","name":"Noura","contentType":"example","duration":"example","expiresAt":"2026-09-19T12:00:00.000Z"},"inputText":"example","inputData":{},"params":{},"dialogue":[{"speaker":"example","text":"مرحباً بك في فوكلا.","voiceId":"example"}],"downloads":{},"downloadsExpireAt":"2026-09-19T12:00:00.000Z","providerCalls":[{"id":"01990000-0000-7000-8000-000000000001","createdAt":"2026-09-19T12:00:00.000Z","capability":"example","group":"audio","provider":"example","model":"example","latencyMs":1,"costUsd":1,"units":"example","errorCode":"example","jobId":"example","role":"example"}],"error":{"code":"example","providerErrors":["example"]}}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/generations/{id}","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/generations/{id}","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/generations/{id}","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/generations/{id}","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/generations/{id}","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/generations/{id}","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/generations/{id}","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/generations/{id}","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/generations/{id}","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/generations/{id}","traceId":"request-id"}}}}}}},"/v1/admin/insights/overview":{"get":{"operationId":"adminInsightsOverview","tags":["Admin"],"summary":"MRR/ARR/ARPA, collected revenue, signups, active users, generations and credits (with the previous period), daily series, funnel, plan mix, segments and who needs attention","description":"Requires admin permission overview.read. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"days","in":"query","required":false,"schema":{"default":30,"description":"7, 30, 90, 180 or 365","type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}}],"security":[{"session":[]},{"apiKey":[]}],"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","propertyNames":{"type":"string"},"additionalProperties":{}},"example":{}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/insights/overview","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/insights/overview","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/insights/overview","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/insights/overview","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/insights/overview","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/insights/overview","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/insights/overview","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/insights/overview","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/insights/overview","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/insights/overview","traceId":"request-id"}}}}}}},"/v1/admin/insights/revenue":{"get":{"operationId":"adminInsightsRevenue","tags":["Admin"],"summary":"12 months of MRR movements (new, expansion, contraction, churn), collected revenue, one-off credit top-up sales, signups, checkout conversion and cancellation reasons","description":"Requires admin permission overview.read. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false}],"security":[{"session":[]},{"apiKey":[]}],"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","propertyNames":{"type":"string"},"additionalProperties":{}},"example":{}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/insights/revenue","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/insights/revenue","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/insights/revenue","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/insights/revenue","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/insights/revenue","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/insights/revenue","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/insights/revenue","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/insights/revenue","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/insights/revenue","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/insights/revenue","traceId":"request-id"}}}}}}},"/v1/admin/insights/growth":{"get":{"operationId":"adminInsightsGrowth","tags":["Admin"],"summary":"Weekly signups (Google/email), active users and generations, activation rates and weekly retention cohorts","description":"Requires admin permission overview.read. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"weeks","in":"query","required":false,"schema":{"default":12,"description":"8, 12 or 26","type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}}],"security":[{"session":[]},{"apiKey":[]}],"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","propertyNames":{"type":"string"},"additionalProperties":{}},"example":{}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/insights/growth","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/insights/growth","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/insights/growth","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/insights/growth","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/insights/growth","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/insights/growth","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/insights/growth","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/insights/growth","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/insights/growth","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/insights/growth","traceId":"request-id"}}}}}}},"/v1/admin/insights/acquisition":{"get":{"operationId":"adminInsightsAcquisition","tags":["Admin"],"summary":"Sign-ups in the window by source (channel, campaign, ad group, ad; from the vocla_src cookie saved at sign-up) with first voice, checkout, paid users and revenue, a daily series, the latest paid users with their source, and the TikTok / X conversion reporting status","description":"Requires admin permission overview.read. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"days","in":"query","required":false,"schema":{"default":30,"description":"7, 30, 90, 180 or 365","type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}},{"name":"channel","in":"query","required":false,"schema":{"description":"tiktok, x, meta, google, chatgpt, search, referral, direct, unknown…","type":"string","maxLength":40}}],"security":[{"session":[]},{"apiKey":[]}],"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","propertyNames":{"type":"string"},"additionalProperties":{}},"example":{}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/insights/acquisition","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/insights/acquisition","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/insights/acquisition","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/insights/acquisition","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/insights/acquisition","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/insights/acquisition","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/insights/acquisition","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/insights/acquisition","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/insights/acquisition","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/insights/acquisition","traceId":"request-id"}}}}}}},"/v1/admin/insights/countries":{"get":{"operationId":"adminInsightsCountries","tags":["Admin"],"summary":"Per effective country (billing, else last detected, else sign-up; \"unknown\" when none): signups in the window, active users (30 days), paying workspaces, MRR (USD, by owner) and conversion (paying ÷ all customers)","description":"Requires admin permission overview.read. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"days","in":"query","required":false,"schema":{"default":30,"description":"7, 30, 90, 180 or 365","type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}}],"security":[{"session":[]},{"apiKey":[]}],"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","propertyNames":{"type":"string"},"additionalProperties":{}},"example":{}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/insights/countries","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/insights/countries","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/insights/countries","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/insights/countries","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/insights/countries","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/insights/countries","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/insights/countries","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/insights/countries","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/insights/countries","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/insights/countries","traceId":"request-id"}}}}}}},"/v1/admin/insights/customers":{"get":{"operationId":"adminInsightsCustomers","tags":["Admin"],"summary":"Every customer with plan, billing, lifecycle category, engagement, lead score and reasons, 30-day usage and checkouts","description":"Requires admin permission users.read. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false}],"security":[{"session":[]},{"apiKey":[]}],"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","propertyNames":{"type":"string"},"additionalProperties":{}},"example":{}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/insights/customers","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/insights/customers","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/insights/customers","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/insights/customers","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/insights/customers","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/insights/customers","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/insights/customers","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/insights/customers","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/insights/customers","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/insights/customers","traceId":"request-id"}}}}}}},"/v1/admin/insights/customers/{id}":{"get":{"operationId":"adminInsightsCustomer","tags":["Admin"],"summary":"One customer (by user id): the row above plus health facts, 30-day daily usage, recent generations, checkouts and invoices","description":"Requires admin permission users.read. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","propertyNames":{"type":"string"},"additionalProperties":{}},"example":{}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/insights/customers/{id}","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/insights/customers/{id}","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/insights/customers/{id}","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/insights/customers/{id}","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/insights/customers/{id}","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/insights/customers/{id}","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/insights/customers/{id}","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/insights/customers/{id}","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/insights/customers/{id}","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/insights/customers/{id}","traceId":"request-id"}}}}}}},"/v1/languages/pack":{"get":{"operationId":"getLanguagePack","tags":["Voices"],"summary":"The speech languages offered: the 13 core languages (Arabic and English first) and the pack languages an admin has switched on, with whether the workspace plan includes the pack","description":"Requires workspace role viewer or above. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false}],"security":[{"session":[]},{"apiKey":[]}],"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"included":{"type":"boolean","description":"The workspace plan includes the pack"},"core":{"type":"array","items":{"type":"string"},"description":"The core speech languages, always offered (ar and en first)"},"languages":{"type":"array","items":{"type":"object","properties":{"code":{"type":"string","description":"Sent as the speech locale"},"name":{"type":"string","description":"English name"},"native":{"type":"string","description":"The language's own name"},"region":{"type":"string","enum":["europe","middle-east","central-asia","south-asia","east-asia","southeast-asia","africa","americas"]},"rtl":{"type":"boolean"}},"required":["code","name","native","region","rtl"]},"description":"Pack languages switched on, by region then name"},"total":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Core and pack languages offered in all"},"locked":{"description":"Offered languages (core or pack) the workspace plan does not have: listed, but speech in them is a 403 {path: languagePack, code: plan}","type":"array","items":{"type":"string"}}},"required":["included","core","languages","total"]},"example":{"included":true,"core":["example"],"languages":[{"code":"example","name":"Noura","native":"example","region":"europe","rtl":true}],"total":-9007199254740991,"locked":["example"]}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/languages/pack","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/languages/pack","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/languages/pack","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/languages/pack","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/languages/pack","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/languages/pack","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/languages/pack","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/languages/pack","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/languages/pack","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/languages/pack","traceId":"request-id"}}}}}}},"/v1/admin/languages/pack":{"get":{"operationId":"adminGetLanguagePack","tags":["Admin"],"summary":"Every speech language with whether it is on, its use in the last 30 days and which plans have it, and the plans","description":"Requires admin permission models.read. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false}],"security":[{"session":[]},{"apiKey":[]}],"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"languages":{"type":"array","items":{"type":"object","properties":{"code":{"type":"string","description":"Sent as the speech locale"},"name":{"type":"string","description":"English name"},"native":{"type":"string","description":"The language's own name"},"region":{"type":"string","enum":["europe","middle-east","central-asia","south-asia","east-asia","southeast-asia","africa","americas"]},"rtl":{"type":"boolean"},"core":{"type":"boolean","description":"One of the 13 core languages"},"protected":{"type":"boolean","description":"Arabic, the default language: never switched off"},"enabled":{"type":"boolean","description":"Switched on for everyone"},"uses30d":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Generations in this language in the last 30 days"},"plans":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"object","properties":{"on":{"type":"boolean","description":"The plan has this language"},"default":{"type":"boolean","description":"Whether it would without an override (core: yes; pack: when the plan includes the pack)"},"override":{"anyOf":[{"type":"string","enum":["on","off"]},{"type":"null"}]}},"required":["on","default","override"]},"description":"By plan slug"}},"required":["code","name","native","region","rtl","core","protected","enabled","uses30d","plans"]},"description":"Core languages first, then the pack by region"},"plans":{"type":"array","items":{"type":"object","properties":{"slug":{"type":"string"},"name":{"type":"object","properties":{"ar":{"type":"string","minLength":1},"en":{"type":"string","minLength":1}},"required":["ar","en"]},"included":{"type":"boolean","description":"The plan includes the languages pack"}},"required":["slug","name","included"]}},"enabledCount":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Pack languages switched on"},"totalOn":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Languages switched on in all"},"updatedAt":{"type":["string","null"]}},"required":["languages","plans","enabledCount","totalOn","updatedAt"]},"example":{"languages":[{"code":"example","name":"Noura","native":"example","region":"europe","rtl":true,"core":true,"protected":true,"enabled":true,"uses30d":-9007199254740991,"plans":{}}],"plans":[{"slug":"example","name":{"ar":"مثال","en":"example"},"included":true}],"enabledCount":-9007199254740991,"totalOn":-9007199254740991,"updatedAt":"2026-09-19T12:00:00.000Z"}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/languages/pack","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/languages/pack","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/languages/pack","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/languages/pack","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/languages/pack","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/languages/pack","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/languages/pack","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/languages/pack","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/languages/pack","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/languages/pack","traceId":"request-id"}}}}}},"put":{"operationId":"adminUpdateLanguagePack","tags":["Admin"],"summary":"Switch languages on or off for everyone and per plan; audit-logged","description":"Requires admin permission models.write. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"X-CSRF-Token","in":"header","required":false,"description":"Required for cookie-authenticated mutations; returned by sign-in/sign-up.","schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"disabled":{"maxItems":200,"type":"array","items":{"type":"string","minLength":2,"maxLength":20},"description":"Language codes (core or pack) switched off for everyone; Arabic cannot be"},"planOff":{"description":"By plan slug: languages taken away from that plan (left out: unchanged)","type":"object","propertyNames":{"type":"string"},"additionalProperties":{"maxItems":200,"type":"array","items":{"type":"string","minLength":2,"maxLength":20}}},"planOn":{"description":"By plan slug: languages given to that plan beyond its default, e.g. one pack language on a plan without the pack (left out: unchanged)","type":"object","propertyNames":{"type":"string"},"additionalProperties":{"maxItems":200,"type":"array","items":{"type":"string","minLength":2,"maxLength":20}}}},"required":["disabled"]},"example":{"disabled":["example"],"planOff":{},"planOn":{}}}}},"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"languages":{"type":"array","items":{"type":"object","properties":{"code":{"type":"string","description":"Sent as the speech locale"},"name":{"type":"string","description":"English name"},"native":{"type":"string","description":"The language's own name"},"region":{"type":"string","enum":["europe","middle-east","central-asia","south-asia","east-asia","southeast-asia","africa","americas"]},"rtl":{"type":"boolean"},"core":{"type":"boolean","description":"One of the 13 core languages"},"protected":{"type":"boolean","description":"Arabic, the default language: never switched off"},"enabled":{"type":"boolean","description":"Switched on for everyone"},"uses30d":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Generations in this language in the last 30 days"},"plans":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"object","properties":{"on":{"type":"boolean","description":"The plan has this language"},"default":{"type":"boolean","description":"Whether it would without an override (core: yes; pack: when the plan includes the pack)"},"override":{"anyOf":[{"type":"string","enum":["on","off"]},{"type":"null"}]}},"required":["on","default","override"]},"description":"By plan slug"}},"required":["code","name","native","region","rtl","core","protected","enabled","uses30d","plans"]},"description":"Core languages first, then the pack by region"},"plans":{"type":"array","items":{"type":"object","properties":{"slug":{"type":"string"},"name":{"type":"object","properties":{"ar":{"type":"string","minLength":1},"en":{"type":"string","minLength":1}},"required":["ar","en"]},"included":{"type":"boolean","description":"The plan includes the languages pack"}},"required":["slug","name","included"]}},"enabledCount":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Pack languages switched on"},"totalOn":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Languages switched on in all"},"updatedAt":{"type":["string","null"]}},"required":["languages","plans","enabledCount","totalOn","updatedAt"]},"example":{"languages":[{"code":"example","name":"Noura","native":"example","region":"europe","rtl":true,"core":true,"protected":true,"enabled":true,"uses30d":-9007199254740991,"plans":{}}],"plans":[{"slug":"example","name":{"ar":"مثال","en":"example"},"included":true}],"enabledCount":-9007199254740991,"totalOn":-9007199254740991,"updatedAt":"2026-09-19T12:00:00.000Z"}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/languages/pack","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/languages/pack","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/languages/pack","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/languages/pack","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/languages/pack","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/languages/pack","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/languages/pack","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/languages/pack","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/languages/pack","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/languages/pack","traceId":"request-id"}}}}}}},"/v1/admin/credits/batch":{"post":{"operationId":"adminAdjustCreditsBatch","tags":["Admin"],"summary":"Add credits to (or take them from) every customer of a segment. Needs users.read as well. dryRun previews; a real run needs an Idempotency-Key and the previewed `expected` count, adjusts each workspace once and audit-logs each adjustment","description":"Requires admin permission credits.write. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"X-CSRF-Token","in":"header","required":false,"description":"Required for cookie-authenticated mutations; returned by sign-in/sign-up.","schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"audience":{"type":"object","properties":{"lifecycle":{"default":[],"maxItems":12,"type":"array","items":{"type":"string","enum":["payment_problem","cancelling","at_risk","paying","comped","churned","hot_lead","warm_lead","new","never_activated","dormant","free"]}},"grade":{"default":[],"maxItems":3,"type":"array","items":{"type":"string","enum":["hot","warm","cold"]}},"engagement":{"default":[],"maxItems":5,"type":"array","items":{"type":"string","enum":["new","active","cooling","dormant","never_activated"]}},"plan":{"default":[],"maxItems":10,"type":"array","items":{"type":"string","minLength":1,"maxLength":100}},"minLeadScore":{"type":"integer","minimum":0,"maximum":100},"q":{"description":"Name or email contains","type":"string","maxLength":200},"country":{"default":[],"description":"Effective country codes; unknown = no country","maxItems":50,"type":"array","items":{"type":"string","pattern":"^(?:[A-Z]{2}|unknown)$"}}},"description":"The Customers & leads filters; empty lists mean \"any\". Suspended accounts are never included"},"emails":{"description":"Only these people of the segment (a pasted list)","maxItems":5000,"type":"array","items":{"type":"string","maxLength":320,"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,}$"}},"amount":{"type":"integer","minimum":-10000000,"maximum":10000000,"description":"Credits added to each workspace; negative takes credits away (a workspace with less is skipped)"},"reason":{"type":"string","minLength":1,"maxLength":1000},"dryRun":{"default":false,"description":"Count and list who would be adjusted without changing anything","type":"boolean"},"expected":{"description":"The `targets` count the preview showed; required for a real run, 409 when the segment changed since","type":"integer","minimum":0,"maximum":9007199254740991}},"required":["audience","amount","reason"]},"example":{"audience":{"lifecycle":[],"grade":[],"engagement":[],"plan":[],"minLeadScore":0,"q":"example","country":[]},"emails":["demo@vocla.ai"],"amount":-10000000,"reason":"example","dryRun":false,"expected":0}}}},"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"matched":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"People in the segment"},"targets":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Workspaces that are (or would be) adjusted"},"adjusted":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"failed":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"totalCredits":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Credits added in all (negative when taken away)"},"skipped":{"type":"array","items":{"type":"object","properties":{"reason":{"type":"string","enum":["no_workspace","insufficient"]},"count":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}},"required":["reason","count"]}},"sample":{"type":"array","items":{"type":"object","properties":{"userId":{"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)$"},"email":{"type":"string"},"name":{"type":"string"},"country":{"type":["string","null"]},"plan":{"type":"string"},"lifecycle":{"type":"string"},"creditsLeft":{"type":"number"}},"required":["userId","email","name","country","plan","lifecycle","creditsLeft"]},"description":"Up to 25 of the people adjusted"},"unmatchedEmails":{"type":"array","items":{"type":"string"},"description":"Up to 25 of the pasted emails that are not in the segment"},"unmatchedEmailCount":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"dryRun":{"type":"boolean"},"batchId":{"description":"Recorded on every adjustment and in the audit log","type":["string","null"]}},"required":["matched","targets","adjusted","failed","totalCredits","skipped","sample","unmatchedEmails","unmatchedEmailCount","dryRun","batchId"]},"example":{"matched":-9007199254740991,"targets":-9007199254740991,"adjusted":-9007199254740991,"failed":-9007199254740991,"totalCredits":-9007199254740991,"skipped":[{"reason":"no_workspace","count":-9007199254740991}],"sample":[{"userId":"01990000-0000-7000-8000-000000000001","email":"example","name":"Noura","country":"example","plan":"example","lifecycle":"example","creditsLeft":1}],"unmatchedEmails":["example"],"unmatchedEmailCount":-9007199254740991,"dryRun":true,"batchId":"example"}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/credits/batch","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/credits/batch","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/credits/batch","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/credits/batch","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/credits/batch","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/credits/batch","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/credits/batch","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/credits/batch","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/credits/batch","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/credits/batch","traceId":"request-id"}}}}}}},"/v1/admin/emails":{"get":{"operationId":"adminListEmails","tags":["Admin"],"summary":"Every email sent, newest first, with its user, template, source and engagement","description":"Requires admin permission emails.read. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"cursor","in":"query","required":false,"schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"schema":{"default":25,"type":"integer","minimum":1,"maximum":100}},{"name":"q","in":"query","required":false,"schema":{"description":"User email or name","type":"string","maxLength":200}},{"name":"template","in":"query","required":false,"schema":{"type":"string","pattern":"^[a-z0-9-]{2,60}$"}},{"name":"source","in":"query","required":false,"schema":{"type":"string","enum":["system","automation","manual","test"]}},{"name":"status","in":"query","required":false,"schema":{"type":"string","maxLength":40}},{"name":"userId","in":"query","required":false,"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)$"}},{"name":"ruleId","in":"query","required":false,"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)$"}},{"name":"from","in":"query","required":false,"schema":{"type":"string","format":"date","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])))$"}},{"name":"to","in":"query","required":false,"schema":{"type":"string","format":"date","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])))$"}}],"security":[{"session":[]},{"apiKey":[]}],"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"items":{"type":"array","items":{"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)$"},"createdAt":{"type":"string"},"template":{"type":"string"},"templateName":{"type":["string","null"]},"source":{"type":"string","enum":["system","automation","manual","test"]},"status":{"type":"string"},"locale":{"type":["string","null"]},"user":{"anyOf":[{"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)$"},"email":{"type":"string"},"name":{"type":"string"}},"required":["id","email","name"]},{"type":"null"}]},"rule":{"anyOf":[{"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)$"},"name":{"type":"string"}},"required":["id","name"]},{"type":"null"}]},"openedAt":{"type":["string","null"]},"clickedAt":{"type":["string","null"]},"error":{"type":["string","null"]},"data":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{},"description":"Variables sent to the template (no secrets)"}},"required":["id","createdAt","template","templateName","source","status","locale","user","rule","openedAt","clickedAt","error","data"]}},"nextCursor":{"type":["string","null"]}},"required":["items","nextCursor"]},"example":{"items":[{"id":"01990000-0000-7000-8000-000000000001","createdAt":"2026-09-19T12:00:00.000Z","template":"example","templateName":"example","source":"system","status":"example","locale":"ar-SA","user":{"id":"01990000-0000-7000-8000-000000000001","email":"example","name":"Noura"},"rule":{"id":"01990000-0000-7000-8000-000000000001","name":"Noura"},"openedAt":"2026-09-19T12:00:00.000Z","clickedAt":"2026-09-19T12:00:00.000Z","error":"example","data":{}}],"nextCursor":"example"}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/emails","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/emails","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/emails","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/emails","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/emails","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/emails","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/emails","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/emails","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/emails","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/emails","traceId":"request-id"}}}}}}},"/v1/admin/emails/summary":{"get":{"operationId":"adminEmailsSummary","tags":["Admin"],"summary":"Sent, delivered, opened and clicked for the same filters, by template, source and day","description":"Requires admin permission emails.read. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"q","in":"query","required":false,"schema":{"description":"User email or name","type":"string","maxLength":200}},{"name":"template","in":"query","required":false,"schema":{"type":"string","pattern":"^[a-z0-9-]{2,60}$"}},{"name":"source","in":"query","required":false,"schema":{"type":"string","enum":["system","automation","manual","test"]}},{"name":"status","in":"query","required":false,"schema":{"type":"string","maxLength":40}},{"name":"userId","in":"query","required":false,"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)$"}},{"name":"ruleId","in":"query","required":false,"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)$"}},{"name":"from","in":"query","required":false,"schema":{"type":"string","format":"date","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])))$"}},{"name":"to","in":"query","required":false,"schema":{"type":"string","format":"date","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])))$"}}],"security":[{"session":[]},{"apiKey":[]}],"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"sent":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"delivered":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"opened":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"clicked":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"bounced":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"byTemplate":{"type":"array","items":{"type":"object","properties":{"sent":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"delivered":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"opened":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"clicked":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"bounced":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"template":{"type":"string"},"name":{"type":["string","null"]}},"required":["sent","delivered","opened","clicked","bounced","template","name"]}},"bySource":{"type":"array","items":{"type":"object","properties":{"source":{"type":"string","enum":["system","automation","manual","test"]},"sent":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}},"required":["source","sent"]}},"daily":{"type":"array","items":{"type":"object","properties":{"day":{"type":"string"},"sent":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"opened":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"clicked":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}},"required":["day","sent","opened","clicked"]}}},"required":["sent","delivered","opened","clicked","bounced","byTemplate","bySource","daily"]},"example":{"sent":-9007199254740991,"delivered":-9007199254740991,"opened":-9007199254740991,"clicked":-9007199254740991,"bounced":-9007199254740991,"byTemplate":[{"sent":-9007199254740991,"delivered":-9007199254740991,"opened":-9007199254740991,"clicked":-9007199254740991,"bounced":-9007199254740991,"template":"example","name":"Noura"}],"bySource":[{"source":"system","sent":-9007199254740991}],"daily":[{"day":"example","sent":-9007199254740991,"opened":-9007199254740991,"clicked":-9007199254740991}]}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/emails/summary","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/emails/summary","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/emails/summary","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/emails/summary","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/emails/summary","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/emails/summary","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/emails/summary","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/emails/summary","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/emails/summary","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/emails/summary","traceId":"request-id"}}}}}}},"/v1/admin/emails/send":{"post":{"operationId":"adminSendEmail","tags":["Admin"],"summary":"Send a template to chosen users (up to 5,000) or to a customer segment; dry run previews the recipients; audit-logged","description":"Requires admin permission emails.write. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"X-CSRF-Token","in":"header","required":false,"description":"Required for cookie-authenticated mutations; returned by sign-in/sign-up.","schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"template":{"type":"string","pattern":"^[a-z0-9-]{2,60}$"},"userIds":{"minItems":1,"maxItems":5000,"type":"array","items":{"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)$"}},"audience":{"description":"Send to every customer in this segment (needs users.read)","type":"object","properties":{"lifecycle":{"default":[],"maxItems":12,"type":"array","items":{"type":"string","enum":["payment_problem","cancelling","at_risk","paying","comped","churned","hot_lead","warm_lead","new","never_activated","dormant","free"]}},"grade":{"default":[],"maxItems":3,"type":"array","items":{"type":"string","enum":["hot","warm","cold"]}},"engagement":{"default":[],"maxItems":5,"type":"array","items":{"type":"string","enum":["new","active","cooling","dormant","never_activated"]}},"plan":{"default":[],"maxItems":10,"type":"array","items":{"type":"string","minLength":1,"maxLength":100}},"minLeadScore":{"type":"integer","minimum":0,"maximum":100},"q":{"description":"Name or email contains","type":"string","maxLength":200},"country":{"default":[],"description":"Effective country codes; unknown = no country","maxItems":50,"type":"array","items":{"type":"string","pattern":"^(?:[A-Z]{2}|unknown)$"}}}},"locale":{"default":"auto","description":"auto: each user’s own language","type":"string","enum":["auto","ar","en"]},"data":{"default":{},"type":"object","properties":{"coupon_code":{"type":"string","maxLength":50},"coupon_percent":{"type":"number","minimum":1,"maximum":100},"headline":{"type":"string","maxLength":200},"body":{"type":"string","maxLength":4000},"cta_text":{"type":"string","maxLength":60},"cta_url":{"type":"string","maxLength":500,"format":"uri"}},"description":"Template variables to add or override; first_name, links, plan and credits are filled for each recipient"},"dryRun":{"default":false,"description":"Count and preview the recipients without sending","type":"boolean"}},"required":["template"]},"example":{"template":"example","userIds":["01990000-0000-7000-8000-000000000001"],"audience":{"lifecycle":[],"grade":[],"engagement":[],"plan":[],"minLeadScore":0,"q":"example","country":[]},"locale":"auto","data":{},"dryRun":false}}}},"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"queued":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"recipients":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"People matched before skips"},"skipped":{"type":"array","items":{"type":"object","properties":{"userId":{"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)$"},"reason":{"type":"string","enum":["not-found","suppressed","opted-out","no-template"]}},"required":["userId","reason"]}},"preview":{"default":[],"type":"array","items":{"type":"object","properties":{"userId":{"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)$"},"email":{"type":"string"},"name":{"type":"string"}},"required":["userId","email","name"]},"description":"Up to 50 people who would receive it (dry run)"}},"required":["queued","recipients","skipped"]},"example":{"queued":-9007199254740991,"recipients":-9007199254740991,"skipped":[{"userId":"01990000-0000-7000-8000-000000000001","reason":"not-found"}],"preview":[]}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/emails/send","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/emails/send","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/emails/send","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/emails/send","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/emails/send","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/emails/send","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/emails/send","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/emails/send","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/emails/send","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/emails/send","traceId":"request-id"}}}}}}},"/v1/admin/emails/test":{"post":{"operationId":"adminTestEmail","tags":["Admin"],"summary":"Send a template to yourself","description":"Requires admin permission emails.write. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"X-CSRF-Token","in":"header","required":false,"description":"Required for cookie-authenticated mutations; returned by sign-in/sign-up.","schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"template":{"type":"string","pattern":"^[a-z0-9-]{2,60}$"},"locale":{"type":"string","enum":["ar","en"]},"data":{"default":{},"type":"object","properties":{"coupon_code":{"type":"string","maxLength":50},"coupon_percent":{"type":"number","minimum":1,"maximum":100},"headline":{"type":"string","maxLength":200},"body":{"type":"string","maxLength":4000},"cta_text":{"type":"string","maxLength":60},"cta_url":{"type":"string","maxLength":500,"format":"uri"}},"description":"Template variables to add or override; first_name, links, plan and credits are filled for each recipient"}},"required":["template","locale"]},"example":{"template":"example","locale":"ar","data":{}}}}},"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"queued":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"recipients":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"People matched before skips"},"skipped":{"type":"array","items":{"type":"object","properties":{"userId":{"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)$"},"reason":{"type":"string","enum":["not-found","suppressed","opted-out","no-template"]}},"required":["userId","reason"]}},"preview":{"default":[],"type":"array","items":{"type":"object","properties":{"userId":{"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)$"},"email":{"type":"string"},"name":{"type":"string"}},"required":["userId","email","name"]},"description":"Up to 50 people who would receive it (dry run)"}},"required":["queued","recipients","skipped"]},"example":{"queued":-9007199254740991,"recipients":-9007199254740991,"skipped":[{"userId":"01990000-0000-7000-8000-000000000001","reason":"not-found"}],"preview":[]}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/emails/test","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/emails/test","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/emails/test","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/emails/test","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/emails/test","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/emails/test","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/emails/test","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/emails/test","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/emails/test","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/emails/test","traceId":"request-id"}}}}}}},"/v1/admin/email-templates":{"get":{"operationId":"adminListEmailTemplates","tags":["Admin"],"summary":"admin List Email Templates","description":"Requires admin permission emails.read. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false}],"security":[{"session":[]},{"apiKey":[]}],"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"items":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":120},"description":{"default":"","type":"string","maxLength":500},"category":{"type":"string","enum":["transactional","marketing"],"description":"Marketing emails carry the SendGrid unsubscribe link and skip people who opted out"},"sendgrid":{"type":"object","properties":{"ar":{"anyOf":[{"type":"string","pattern":"^d-[0-9a-f]{32}$"},{"type":"null"}]},"en":{"anyOf":[{"type":"string","pattern":"^d-[0-9a-f]{32}$"},{"type":"null"}]}},"required":["ar","en"]},"variables":{"default":[],"maxItems":30,"type":"array","items":{"type":"string","pattern":"^[a-z_]{1,40}$"}},"enabled":{"default":true,"type":"boolean"},"key":{"type":"string","pattern":"^[a-z0-9-]{2,60}$"},"updatedAt":{"type":"string"},"ready":{"type":"boolean","description":"Enabled and sendable in both languages (a SendGrid id or a built-in design)"},"builtIn":{"type":"object","properties":{"ar":{"type":"boolean"},"en":{"type":"boolean"}},"required":["ar","en"],"description":"Has a built-in design (scripts/email-templates) the API sends itself when that language has no SendGrid id"},"last30Days":{"type":"object","properties":{"sent":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"delivered":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"opened":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"clicked":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"bounced":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}},"required":["sent","delivered","opened","clicked","bounced"]}},"required":["name","category","sendgrid","key","updatedAt","ready","builtIn","last30Days"]}}},"required":["items"]},"example":{"items":[{"name":"Noura","description":"","category":"transactional","sendgrid":{"ar":"مثال","en":"example"},"variables":[],"enabled":true,"key":"example","updatedAt":"2026-09-19T12:00:00.000Z","ready":true,"builtIn":{"ar":true,"en":true},"last30Days":{"sent":-9007199254740991,"delivered":-9007199254740991,"opened":-9007199254740991,"clicked":-9007199254740991,"bounced":-9007199254740991}}]}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/email-templates","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/email-templates","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/email-templates","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/email-templates","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/email-templates","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/email-templates","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/email-templates","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/email-templates","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/email-templates","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/email-templates","traceId":"request-id"}}}}}},"post":{"operationId":"adminCreateEmailTemplate","tags":["Admin"],"summary":"admin Create Email Template","description":"Requires admin permission emails.write. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"X-CSRF-Token","in":"header","required":false,"description":"Required for cookie-authenticated mutations; returned by sign-in/sign-up.","schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":120},"description":{"default":"","type":"string","maxLength":500},"category":{"type":"string","enum":["transactional","marketing"],"description":"Marketing emails carry the SendGrid unsubscribe link and skip people who opted out"},"sendgrid":{"type":"object","properties":{"ar":{"anyOf":[{"type":"string","pattern":"^d-[0-9a-f]{32}$"},{"type":"null"}]},"en":{"anyOf":[{"type":"string","pattern":"^d-[0-9a-f]{32}$"},{"type":"null"}]}},"required":["ar","en"]},"variables":{"default":[],"maxItems":30,"type":"array","items":{"type":"string","pattern":"^[a-z_]{1,40}$"}},"enabled":{"default":true,"type":"boolean"},"key":{"type":"string","pattern":"^[a-z0-9-]{2,60}$"}},"required":["name","category","sendgrid","key"]},"example":{"name":"Noura","description":"","category":"transactional","sendgrid":{"ar":"مثال","en":"example"},"variables":[],"enabled":true,"key":"example"}}}},"responses":{"201":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":120},"description":{"default":"","type":"string","maxLength":500},"category":{"type":"string","enum":["transactional","marketing"],"description":"Marketing emails carry the SendGrid unsubscribe link and skip people who opted out"},"sendgrid":{"type":"object","properties":{"ar":{"anyOf":[{"type":"string","pattern":"^d-[0-9a-f]{32}$"},{"type":"null"}]},"en":{"anyOf":[{"type":"string","pattern":"^d-[0-9a-f]{32}$"},{"type":"null"}]}},"required":["ar","en"]},"variables":{"default":[],"maxItems":30,"type":"array","items":{"type":"string","pattern":"^[a-z_]{1,40}$"}},"enabled":{"default":true,"type":"boolean"},"key":{"type":"string","pattern":"^[a-z0-9-]{2,60}$"},"updatedAt":{"type":"string"},"ready":{"type":"boolean","description":"Enabled and sendable in both languages (a SendGrid id or a built-in design)"},"builtIn":{"type":"object","properties":{"ar":{"type":"boolean"},"en":{"type":"boolean"}},"required":["ar","en"],"description":"Has a built-in design (scripts/email-templates) the API sends itself when that language has no SendGrid id"},"last30Days":{"type":"object","properties":{"sent":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"delivered":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"opened":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"clicked":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"bounced":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}},"required":["sent","delivered","opened","clicked","bounced"]}},"required":["name","category","sendgrid","key","updatedAt","ready","builtIn","last30Days"]},"example":{"name":"Noura","description":"","category":"transactional","sendgrid":{"ar":"مثال","en":"example"},"variables":[],"enabled":true,"key":"example","updatedAt":"2026-09-19T12:00:00.000Z","ready":true,"builtIn":{"ar":true,"en":true},"last30Days":{"sent":-9007199254740991,"delivered":-9007199254740991,"opened":-9007199254740991,"clicked":-9007199254740991,"bounced":-9007199254740991}}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/email-templates","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/email-templates","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/email-templates","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/email-templates","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/email-templates","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/email-templates","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/email-templates","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/email-templates","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/email-templates","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/email-templates","traceId":"request-id"}}}}}}},"/v1/admin/email-templates/{key}":{"put":{"operationId":"adminUpdateEmailTemplate","tags":["Admin"],"summary":"admin Update Email Template","description":"Requires admin permission emails.write. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"key","in":"path","required":true,"schema":{"type":"string"}},{"name":"X-CSRF-Token","in":"header","required":false,"description":"Required for cookie-authenticated mutations; returned by sign-in/sign-up.","schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":120},"description":{"default":"","type":"string","maxLength":500},"category":{"type":"string","enum":["transactional","marketing"],"description":"Marketing emails carry the SendGrid unsubscribe link and skip people who opted out"},"sendgrid":{"type":"object","properties":{"ar":{"anyOf":[{"type":"string","pattern":"^d-[0-9a-f]{32}$"},{"type":"null"}]},"en":{"anyOf":[{"type":"string","pattern":"^d-[0-9a-f]{32}$"},{"type":"null"}]}},"required":["ar","en"]},"variables":{"default":[],"maxItems":30,"type":"array","items":{"type":"string","pattern":"^[a-z_]{1,40}$"}},"enabled":{"default":true,"type":"boolean"}},"required":["name","category","sendgrid"]},"example":{"name":"Noura","description":"","category":"transactional","sendgrid":{"ar":"مثال","en":"example"},"variables":[],"enabled":true}}}},"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":120},"description":{"default":"","type":"string","maxLength":500},"category":{"type":"string","enum":["transactional","marketing"],"description":"Marketing emails carry the SendGrid unsubscribe link and skip people who opted out"},"sendgrid":{"type":"object","properties":{"ar":{"anyOf":[{"type":"string","pattern":"^d-[0-9a-f]{32}$"},{"type":"null"}]},"en":{"anyOf":[{"type":"string","pattern":"^d-[0-9a-f]{32}$"},{"type":"null"}]}},"required":["ar","en"]},"variables":{"default":[],"maxItems":30,"type":"array","items":{"type":"string","pattern":"^[a-z_]{1,40}$"}},"enabled":{"default":true,"type":"boolean"},"key":{"type":"string","pattern":"^[a-z0-9-]{2,60}$"},"updatedAt":{"type":"string"},"ready":{"type":"boolean","description":"Enabled and sendable in both languages (a SendGrid id or a built-in design)"},"builtIn":{"type":"object","properties":{"ar":{"type":"boolean"},"en":{"type":"boolean"}},"required":["ar","en"],"description":"Has a built-in design (scripts/email-templates) the API sends itself when that language has no SendGrid id"},"last30Days":{"type":"object","properties":{"sent":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"delivered":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"opened":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"clicked":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"bounced":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}},"required":["sent","delivered","opened","clicked","bounced"]}},"required":["name","category","sendgrid","key","updatedAt","ready","builtIn","last30Days"]},"example":{"name":"Noura","description":"","category":"transactional","sendgrid":{"ar":"مثال","en":"example"},"variables":[],"enabled":true,"key":"example","updatedAt":"2026-09-19T12:00:00.000Z","ready":true,"builtIn":{"ar":true,"en":true},"last30Days":{"sent":-9007199254740991,"delivered":-9007199254740991,"opened":-9007199254740991,"clicked":-9007199254740991,"bounced":-9007199254740991}}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/email-templates/{key}","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/email-templates/{key}","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/email-templates/{key}","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/email-templates/{key}","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/email-templates/{key}","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/email-templates/{key}","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/email-templates/{key}","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/email-templates/{key}","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/email-templates/{key}","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/email-templates/{key}","traceId":"request-id"}}}}}}},"/v1/admin/email-templates/{key}/preview":{"get":{"operationId":"adminPreviewEmailTemplate","tags":["Admin"],"summary":"The email as it would look: the built-in design rendered with one person’s data (their plan, checkout, suggested voice…)","description":"Requires admin permission emails.read. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"key","in":"path","required":true,"schema":{"type":"string"}},{"name":"locale","in":"query","required":false,"schema":{"default":"ar","type":"string","enum":["ar","en"]}},{"name":"userId","in":"query","required":false,"schema":{"description":"Fill it in with this person’s data (default: you)","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)$"}}],"security":[{"session":[]},{"apiKey":[]}],"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"key":{"type":"string","pattern":"^[a-z0-9-]{2,60}$"},"locale":{"type":"string","enum":["ar","en"]},"exists":{"type":"boolean"},"sendgridId":{"description":"When set, this SendGrid template is what goes out; the preview shows the built-in design it was made from","type":["string","null"]},"source":{"type":"string","enum":["sendgrid","built-in","none"]},"subject":{"type":["string","null"]},"preheader":{"type":["string","null"]},"html":{"description":"The rendered email (null when the template only exists in SendGrid)","type":["string","null"]},"recipient":{"anyOf":[{"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)$"},"email":{"type":"string"},"name":{"type":"string"}},"required":["id","email","name"]},{"type":"null"}],"description":"Whose data filled it in"},"data":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{},"description":"The variables it was rendered with"}},"required":["key","locale","exists","sendgridId","source","subject","preheader","html","recipient","data"]},"example":{"key":"example","locale":"ar","exists":true,"sendgridId":"example","source":"sendgrid","subject":"example","preheader":"example","html":"example","recipient":{"id":"01990000-0000-7000-8000-000000000001","email":"example","name":"Noura"},"data":{}}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/email-templates/{key}/preview","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/email-templates/{key}/preview","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/email-templates/{key}/preview","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/email-templates/{key}/preview","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/email-templates/{key}/preview","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/email-templates/{key}/preview","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/email-templates/{key}/preview","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/email-templates/{key}/preview","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/email-templates/{key}/preview","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/email-templates/{key}/preview","traceId":"request-id"}}}}}}},"/v1/admin/email-rules":{"get":{"operationId":"adminListEmailRules","tags":["Admin"],"summary":"admin List Email Rules","description":"Requires admin permission emails.read. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false}],"security":[{"session":[]},{"apiKey":[]}],"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"items":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":120},"trigger":{"type":"string","enum":["subscribed","account_age","generations","inactive","checkout_abandoned","no_first_generation","plan_cancelled"],"description":"subscribed: a paid subscription started; account_age: account is `threshold` days old; generations: `threshold` successful generations; inactive: nothing created for `threshold` days; checkout_abandoned: a plan checkout still unpaid `threshold` minutes after it was opened (once per checkout, at most weekly per person, only checkouts opened after the rule was switched on, up to 48 hours old); no_first_generation: nothing created `threshold` hours after signing up (only sign-ups after the rule was switched on, up to 48 hours late); plan_cancelled: a paid plan set to cancel, `threshold` days before it ends (once per cancellation; skipped once the plan is kept)"},"threshold":{"default":0,"type":"integer","minimum":0,"maximum":3650},"minGenerations":{"default":0,"type":"integer","minimum":0,"maximum":100000},"audience":{"default":"free","type":"string","enum":["free","paid","all"]},"template":{"type":"string","pattern":"^[a-z0-9-]{2,60}$"},"couponCode":{"default":null,"anyOf":[{"type":"string","maxLength":50},{"type":"null"}]},"lookbackDays":{"default":7,"description":"Only people whose condition became true in the last N days, so enabling a rule never mails the whole history","type":"integer","minimum":1,"maximum":365},"enabled":{"default":false,"type":"boolean"},"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)$"},"key":{"type":"string"},"enabledAt":{"type":["string","null"]},"updatedAt":{"type":"string"},"couponPercent":{"description":"From Billing → Coupons; null when the code is unknown or disabled","type":["number","null"]},"stats":{"type":"object","properties":{"sent":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"sent7d":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"opened":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"clicked":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"converted":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Recipients who started a paid plan within 14 days of the email"}},"required":["sent","sent7d","opened","clicked","converted"]}},"required":["name","trigger","template","id","key","enabledAt","updatedAt","couponPercent","stats"]}}},"required":["items"]},"example":{"items":[{"name":"Noura","trigger":"subscribed","threshold":0,"minGenerations":0,"audience":"free","template":"example","couponCode":null,"lookbackDays":7,"enabled":false,"id":"01990000-0000-7000-8000-000000000001","key":"example","enabledAt":"2026-09-19T12:00:00.000Z","updatedAt":"2026-09-19T12:00:00.000Z","couponPercent":"example","stats":{"sent":-9007199254740991,"sent7d":-9007199254740991,"opened":-9007199254740991,"clicked":-9007199254740991,"converted":-9007199254740991}}]}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/email-rules","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/email-rules","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/email-rules","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/email-rules","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/email-rules","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/email-rules","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/email-rules","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/email-rules","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/email-rules","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/email-rules","traceId":"request-id"}}}}}},"post":{"operationId":"adminCreateEmailRule","tags":["Admin"],"summary":"admin Create Email Rule","description":"Requires admin permission emails.write. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"X-CSRF-Token","in":"header","required":false,"description":"Required for cookie-authenticated mutations; returned by sign-in/sign-up.","schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":120},"trigger":{"type":"string","enum":["subscribed","account_age","generations","inactive","checkout_abandoned","no_first_generation","plan_cancelled"],"description":"subscribed: a paid subscription started; account_age: account is `threshold` days old; generations: `threshold` successful generations; inactive: nothing created for `threshold` days; checkout_abandoned: a plan checkout still unpaid `threshold` minutes after it was opened (once per checkout, at most weekly per person, only checkouts opened after the rule was switched on, up to 48 hours old); no_first_generation: nothing created `threshold` hours after signing up (only sign-ups after the rule was switched on, up to 48 hours late); plan_cancelled: a paid plan set to cancel, `threshold` days before it ends (once per cancellation; skipped once the plan is kept)"},"threshold":{"default":0,"type":"integer","minimum":0,"maximum":3650},"minGenerations":{"default":0,"type":"integer","minimum":0,"maximum":100000},"audience":{"default":"free","type":"string","enum":["free","paid","all"]},"template":{"type":"string","pattern":"^[a-z0-9-]{2,60}$"},"couponCode":{"default":null,"anyOf":[{"type":"string","maxLength":50},{"type":"null"}]},"lookbackDays":{"default":7,"description":"Only people whose condition became true in the last N days, so enabling a rule never mails the whole history","type":"integer","minimum":1,"maximum":365},"enabled":{"default":false,"type":"boolean"}},"required":["name","trigger","template"]},"example":{"name":"Noura","trigger":"subscribed","threshold":0,"minGenerations":0,"audience":"free","template":"example","couponCode":null,"lookbackDays":7,"enabled":false}}}},"responses":{"201":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":120},"trigger":{"type":"string","enum":["subscribed","account_age","generations","inactive","checkout_abandoned","no_first_generation","plan_cancelled"],"description":"subscribed: a paid subscription started; account_age: account is `threshold` days old; generations: `threshold` successful generations; inactive: nothing created for `threshold` days; checkout_abandoned: a plan checkout still unpaid `threshold` minutes after it was opened (once per checkout, at most weekly per person, only checkouts opened after the rule was switched on, up to 48 hours old); no_first_generation: nothing created `threshold` hours after signing up (only sign-ups after the rule was switched on, up to 48 hours late); plan_cancelled: a paid plan set to cancel, `threshold` days before it ends (once per cancellation; skipped once the plan is kept)"},"threshold":{"default":0,"type":"integer","minimum":0,"maximum":3650},"minGenerations":{"default":0,"type":"integer","minimum":0,"maximum":100000},"audience":{"default":"free","type":"string","enum":["free","paid","all"]},"template":{"type":"string","pattern":"^[a-z0-9-]{2,60}$"},"couponCode":{"default":null,"anyOf":[{"type":"string","maxLength":50},{"type":"null"}]},"lookbackDays":{"default":7,"description":"Only people whose condition became true in the last N days, so enabling a rule never mails the whole history","type":"integer","minimum":1,"maximum":365},"enabled":{"default":false,"type":"boolean"},"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)$"},"key":{"type":"string"},"enabledAt":{"type":["string","null"]},"updatedAt":{"type":"string"},"couponPercent":{"description":"From Billing → Coupons; null when the code is unknown or disabled","type":["number","null"]},"stats":{"type":"object","properties":{"sent":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"sent7d":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"opened":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"clicked":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"converted":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Recipients who started a paid plan within 14 days of the email"}},"required":["sent","sent7d","opened","clicked","converted"]}},"required":["name","trigger","template","id","key","enabledAt","updatedAt","couponPercent","stats"]},"example":{"name":"Noura","trigger":"subscribed","threshold":0,"minGenerations":0,"audience":"free","template":"example","couponCode":null,"lookbackDays":7,"enabled":false,"id":"01990000-0000-7000-8000-000000000001","key":"example","enabledAt":"2026-09-19T12:00:00.000Z","updatedAt":"2026-09-19T12:00:00.000Z","couponPercent":"example","stats":{"sent":-9007199254740991,"sent7d":-9007199254740991,"opened":-9007199254740991,"clicked":-9007199254740991,"converted":-9007199254740991}}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/email-rules","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/email-rules","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/email-rules","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/email-rules","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/email-rules","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/email-rules","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/email-rules","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/email-rules","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/email-rules","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/email-rules","traceId":"request-id"}}}}}}},"/v1/admin/email-rules/{id}":{"put":{"operationId":"adminUpdateEmailRule","tags":["Admin"],"summary":"admin Update Email Rule","description":"Requires admin permission emails.write. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"X-CSRF-Token","in":"header","required":false,"description":"Required for cookie-authenticated mutations; returned by sign-in/sign-up.","schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":120},"trigger":{"type":"string","enum":["subscribed","account_age","generations","inactive","checkout_abandoned","no_first_generation","plan_cancelled"],"description":"subscribed: a paid subscription started; account_age: account is `threshold` days old; generations: `threshold` successful generations; inactive: nothing created for `threshold` days; checkout_abandoned: a plan checkout still unpaid `threshold` minutes after it was opened (once per checkout, at most weekly per person, only checkouts opened after the rule was switched on, up to 48 hours old); no_first_generation: nothing created `threshold` hours after signing up (only sign-ups after the rule was switched on, up to 48 hours late); plan_cancelled: a paid plan set to cancel, `threshold` days before it ends (once per cancellation; skipped once the plan is kept)"},"threshold":{"default":0,"type":"integer","minimum":0,"maximum":3650},"minGenerations":{"default":0,"type":"integer","minimum":0,"maximum":100000},"audience":{"default":"free","type":"string","enum":["free","paid","all"]},"template":{"type":"string","pattern":"^[a-z0-9-]{2,60}$"},"couponCode":{"default":null,"anyOf":[{"type":"string","maxLength":50},{"type":"null"}]},"lookbackDays":{"default":7,"description":"Only people whose condition became true in the last N days, so enabling a rule never mails the whole history","type":"integer","minimum":1,"maximum":365},"enabled":{"default":false,"type":"boolean"}},"required":["name","trigger","template"]},"example":{"name":"Noura","trigger":"subscribed","threshold":0,"minGenerations":0,"audience":"free","template":"example","couponCode":null,"lookbackDays":7,"enabled":false}}}},"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":120},"trigger":{"type":"string","enum":["subscribed","account_age","generations","inactive","checkout_abandoned","no_first_generation","plan_cancelled"],"description":"subscribed: a paid subscription started; account_age: account is `threshold` days old; generations: `threshold` successful generations; inactive: nothing created for `threshold` days; checkout_abandoned: a plan checkout still unpaid `threshold` minutes after it was opened (once per checkout, at most weekly per person, only checkouts opened after the rule was switched on, up to 48 hours old); no_first_generation: nothing created `threshold` hours after signing up (only sign-ups after the rule was switched on, up to 48 hours late); plan_cancelled: a paid plan set to cancel, `threshold` days before it ends (once per cancellation; skipped once the plan is kept)"},"threshold":{"default":0,"type":"integer","minimum":0,"maximum":3650},"minGenerations":{"default":0,"type":"integer","minimum":0,"maximum":100000},"audience":{"default":"free","type":"string","enum":["free","paid","all"]},"template":{"type":"string","pattern":"^[a-z0-9-]{2,60}$"},"couponCode":{"default":null,"anyOf":[{"type":"string","maxLength":50},{"type":"null"}]},"lookbackDays":{"default":7,"description":"Only people whose condition became true in the last N days, so enabling a rule never mails the whole history","type":"integer","minimum":1,"maximum":365},"enabled":{"default":false,"type":"boolean"},"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)$"},"key":{"type":"string"},"enabledAt":{"type":["string","null"]},"updatedAt":{"type":"string"},"couponPercent":{"description":"From Billing → Coupons; null when the code is unknown or disabled","type":["number","null"]},"stats":{"type":"object","properties":{"sent":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"sent7d":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"opened":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"clicked":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"converted":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Recipients who started a paid plan within 14 days of the email"}},"required":["sent","sent7d","opened","clicked","converted"]}},"required":["name","trigger","template","id","key","enabledAt","updatedAt","couponPercent","stats"]},"example":{"name":"Noura","trigger":"subscribed","threshold":0,"minGenerations":0,"audience":"free","template":"example","couponCode":null,"lookbackDays":7,"enabled":false,"id":"01990000-0000-7000-8000-000000000001","key":"example","enabledAt":"2026-09-19T12:00:00.000Z","updatedAt":"2026-09-19T12:00:00.000Z","couponPercent":"example","stats":{"sent":-9007199254740991,"sent7d":-9007199254740991,"opened":-9007199254740991,"clicked":-9007199254740991,"converted":-9007199254740991}}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/email-rules/{id}","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/email-rules/{id}","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/email-rules/{id}","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/email-rules/{id}","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/email-rules/{id}","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/email-rules/{id}","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/email-rules/{id}","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/email-rules/{id}","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/email-rules/{id}","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/email-rules/{id}","traceId":"request-id"}}}}}},"delete":{"operationId":"adminDeleteEmailRule","tags":["Admin"],"summary":"admin Delete Email Rule","description":"Requires admin permission emails.write. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"X-CSRF-Token","in":"header","required":false,"description":"Required for cookie-authenticated mutations; returned by sign-in/sign-up.","schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"ok":{"type":"boolean"}},"required":["ok"]},"example":{"ok":true}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/email-rules/{id}","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/email-rules/{id}","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/email-rules/{id}","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/email-rules/{id}","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/email-rules/{id}","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/email-rules/{id}","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/email-rules/{id}","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/email-rules/{id}","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/email-rules/{id}","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/email-rules/{id}","traceId":"request-id"}}}}}}},"/v1/admin/email-rules/{id}/preview":{"get":{"operationId":"adminPreviewEmailRule","tags":["Admin"],"summary":"Dry run: who the rule would email on its next run","description":"Requires admin permission emails.read. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"eligible":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"People who would get this email on the next run"},"sample":{"type":"array","items":{"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)$"},"email":{"type":"string"},"name":{"type":"string"},"since":{"type":"string"}},"required":["id","email","name","since"]}},"warnings":{"type":"array","items":{"type":"string"}}},"required":["eligible","sample","warnings"]},"example":{"eligible":-9007199254740991,"sample":[{"id":"01990000-0000-7000-8000-000000000001","email":"example","name":"Noura","since":"example"}],"warnings":["example"]}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/email-rules/{id}/preview","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/email-rules/{id}/preview","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/email-rules/{id}/preview","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/email-rules/{id}/preview","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/email-rules/{id}/preview","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/email-rules/{id}/preview","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/email-rules/{id}/preview","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/email-rules/{id}/preview","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/email-rules/{id}/preview","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/email-rules/{id}/preview","traceId":"request-id"}}}}}}},"/v1/admin/email-rules/run":{"post":{"operationId":"adminRunEmailRules","tags":["Admin"],"summary":"Run every enabled rule now instead of waiting for the schedule","description":"Requires admin permission emails.write. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"X-CSRF-Token","in":"header","required":false,"description":"Required for cookie-authenticated mutations; returned by sign-in/sign-up.","schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"queued":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}},"required":["queued"]},"example":{"queued":-9007199254740991}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/email-rules/run","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/email-rules/run","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/email-rules/run","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/email-rules/run","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/email-rules/run","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/email-rules/run","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/email-rules/run","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/email-rules/run","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/email-rules/run","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/email-rules/run","traceId":"request-id"}}}}}}},"/v1/admin/email-settings":{"get":{"operationId":"adminGetEmailSettings","tags":["Admin"],"summary":"admin Get Email Settings","description":"Requires admin permission emails.read. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false}],"security":[{"session":[]},{"apiKey":[]}],"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"unsubscribeGroupId":{"anyOf":[{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},{"type":"null"}],"description":"SendGrid unsubscribe group for marketing templates (Suppressions → Unsubscribe Groups)"},"dailyCap":{"type":"integer","minimum":0,"maximum":100000,"description":"Most automated emails the engine sends in a day (0 pauses automations)"},"quietHours":{"type":"boolean","description":"Hold automated emails between 22:00 and 08:00 Riyadh time"}},"required":["unsubscribeGroupId","dailyCap","quietHours"]},"example":{"unsubscribeGroupId":1,"dailyCap":0,"quietHours":true}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/email-settings","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/email-settings","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/email-settings","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/email-settings","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/email-settings","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/email-settings","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/email-settings","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/email-settings","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/email-settings","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/email-settings","traceId":"request-id"}}}}}},"put":{"operationId":"adminUpdateEmailSettings","tags":["Admin"],"summary":"admin Update Email Settings","description":"Requires admin permission emails.write. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"X-CSRF-Token","in":"header","required":false,"description":"Required for cookie-authenticated mutations; returned by sign-in/sign-up.","schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"unsubscribeGroupId":{"anyOf":[{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},{"type":"null"}],"description":"SendGrid unsubscribe group for marketing templates (Suppressions → Unsubscribe Groups)"},"dailyCap":{"type":"integer","minimum":0,"maximum":100000,"description":"Most automated emails the engine sends in a day (0 pauses automations)"},"quietHours":{"type":"boolean","description":"Hold automated emails between 22:00 and 08:00 Riyadh time"}},"required":["unsubscribeGroupId","dailyCap","quietHours"]},"example":{"unsubscribeGroupId":1,"dailyCap":0,"quietHours":true}}}},"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"unsubscribeGroupId":{"anyOf":[{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},{"type":"null"}],"description":"SendGrid unsubscribe group for marketing templates (Suppressions → Unsubscribe Groups)"},"dailyCap":{"type":"integer","minimum":0,"maximum":100000,"description":"Most automated emails the engine sends in a day (0 pauses automations)"},"quietHours":{"type":"boolean","description":"Hold automated emails between 22:00 and 08:00 Riyadh time"}},"required":["unsubscribeGroupId","dailyCap","quietHours"]},"example":{"unsubscribeGroupId":1,"dailyCap":0,"quietHours":true}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/email-settings","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/email-settings","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/email-settings","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/email-settings","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/email-settings","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/email-settings","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/email-settings","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/email-settings","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/email-settings","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/email-settings","traceId":"request-id"}}}}}}},"/v1/public/mobile-config":{"get":{"operationId":"publicMobileConfig","tags":["Mobile app"],"summary":"Remote config of the mobile apps: external purchase links per platform, minimum/latest versions, store URLs","description":"Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false}],"security":[],"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"externalPurchases":{"type":"object","properties":{"android":{"type":"string","enum":["all","allowed-countries","none"],"description":"Android: link to the web checkout"},"ios":{"type":"string","enum":["all","allowed-countries","none"],"description":"iOS: link to the web checkout (Apple: US storefront; EU only with the DMA entitlement)"},"countries":{"maxItems":60,"type":"array","items":{"type":"string","pattern":"^[A-Z]{2}$"},"description":"Where `allowed-countries` allows links (ISO 3166-1 alpha-2)"}},"required":["android","ios","countries"]},"minAppVersion":{"type":"object","properties":{"ios":{"type":"string","pattern":"^\\d{1,4}\\.\\d{1,4}\\.\\d{1,4}$"},"android":{"type":"string","pattern":"^\\d{1,4}\\.\\d{1,4}\\.\\d{1,4}$"}},"required":["ios","android"],"description":"Older apps must update (blocking screen)"},"latestAppVersion":{"type":"object","properties":{"ios":{"type":"string","pattern":"^\\d{1,4}\\.\\d{1,4}\\.\\d{1,4}$"},"android":{"type":"string","pattern":"^\\d{1,4}\\.\\d{1,4}\\.\\d{1,4}$"}},"required":["ios","android"],"description":"Older apps are invited to update"},"forceUpdate":{"type":"boolean","description":"Below latestAppVersion is blocking too"},"storeUrls":{"type":"object","properties":{"ios":{"anyOf":[{"type":"string","format":"uri"},{"type":"null"}]},"android":{"anyOf":[{"type":"string","format":"uri"},{"type":"null"}]}},"required":["ios","android"]},"webUrl":{"type":"string","format":"uri","description":"The website named in \"Manage your plan on …\""},"country":{"description":"Country of the signed-in user (billing, else detected) or of this request; null when unknown","type":["string","null"]}},"required":["externalPurchases","minAppVersion","latestAppVersion","forceUpdate","storeUrls","webUrl","country"]},"example":{"externalPurchases":{"android":"all","ios":"all","countries":["example"]},"minAppVersion":{"ios":"example","android":"example"},"latestAppVersion":{"ios":"example","android":"example"},"forceUpdate":true,"storeUrls":{"ios":"http://localhost:4000/example","android":"http://localhost:4000/example"},"webUrl":"http://localhost:4000/example","country":"example"}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/public/mobile-config","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/public/mobile-config","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/public/mobile-config","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/public/mobile-config","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/public/mobile-config","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/public/mobile-config","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/public/mobile-config","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/public/mobile-config","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/public/mobile-config","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/public/mobile-config","traceId":"request-id"}}}}}}},"/v1/public/mobile/billing-return":{"get":{"operationId":"mobileBillingReturn","tags":["Mobile app"],"summary":"Checkout return for the apps (returnTo: mobile): redirects to vocla://billing/return?checkoutId=…","description":"Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"checkoutId","in":"query","required":true,"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)$"}}],"security":[],"responses":{"302":{"description":"Redirect to the originating app and locale; successful OAuth also sets the session cookie.","headers":{"Location":{"schema":{"type":"string","format":"uri"}},"Set-Cookie":{"schema":{"type":"string"}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/public/mobile/billing-return","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/public/mobile/billing-return","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/public/mobile/billing-return","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/public/mobile/billing-return","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/public/mobile/billing-return","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/public/mobile/billing-return","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/public/mobile/billing-return","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/public/mobile/billing-return","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/public/mobile/billing-return","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/public/mobile/billing-return","traceId":"request-id"}}}}}}},"/v1/admin/mobile-config":{"get":{"operationId":"adminGetMobileConfig","tags":["Admin"],"summary":"Mobile app config (app_settings mobileConfig) with the defaults","description":"Requires admin permission billing.read. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false}],"security":[{"session":[]},{"apiKey":[]}],"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"externalPurchases":{"type":"object","properties":{"android":{"type":"string","enum":["all","allowed-countries","none"],"description":"Android: link to the web checkout"},"ios":{"type":"string","enum":["all","allowed-countries","none"],"description":"iOS: link to the web checkout (Apple: US storefront; EU only with the DMA entitlement)"},"countries":{"maxItems":60,"type":"array","items":{"type":"string","pattern":"^[A-Z]{2}$"},"description":"Where `allowed-countries` allows links (ISO 3166-1 alpha-2)"}},"required":["android","ios","countries"]},"minAppVersion":{"type":"object","properties":{"ios":{"type":"string","pattern":"^\\d{1,4}\\.\\d{1,4}\\.\\d{1,4}$"},"android":{"type":"string","pattern":"^\\d{1,4}\\.\\d{1,4}\\.\\d{1,4}$"}},"required":["ios","android"],"description":"Older apps must update (blocking screen)"},"latestAppVersion":{"type":"object","properties":{"ios":{"type":"string","pattern":"^\\d{1,4}\\.\\d{1,4}\\.\\d{1,4}$"},"android":{"type":"string","pattern":"^\\d{1,4}\\.\\d{1,4}\\.\\d{1,4}$"}},"required":["ios","android"],"description":"Older apps are invited to update"},"forceUpdate":{"type":"boolean","description":"Below latestAppVersion is blocking too"},"storeUrls":{"type":"object","properties":{"ios":{"anyOf":[{"type":"string","format":"uri"},{"type":"null"}]},"android":{"anyOf":[{"type":"string","format":"uri"},{"type":"null"}]}},"required":["ios","android"]},"webUrl":{"type":"string","format":"uri","description":"The website named in \"Manage your plan on …\""},"defaults":{"type":"object","properties":{"externalPurchases":{"type":"object","properties":{"android":{"type":"string","enum":["all","allowed-countries","none"],"description":"Android: link to the web checkout"},"ios":{"type":"string","enum":["all","allowed-countries","none"],"description":"iOS: link to the web checkout (Apple: US storefront; EU only with the DMA entitlement)"},"countries":{"maxItems":60,"type":"array","items":{"type":"string","pattern":"^[A-Z]{2}$"},"description":"Where `allowed-countries` allows links (ISO 3166-1 alpha-2)"}},"required":["android","ios","countries"]},"minAppVersion":{"type":"object","properties":{"ios":{"type":"string","pattern":"^\\d{1,4}\\.\\d{1,4}\\.\\d{1,4}$"},"android":{"type":"string","pattern":"^\\d{1,4}\\.\\d{1,4}\\.\\d{1,4}$"}},"required":["ios","android"],"description":"Older apps must update (blocking screen)"},"latestAppVersion":{"type":"object","properties":{"ios":{"type":"string","pattern":"^\\d{1,4}\\.\\d{1,4}\\.\\d{1,4}$"},"android":{"type":"string","pattern":"^\\d{1,4}\\.\\d{1,4}\\.\\d{1,4}$"}},"required":["ios","android"],"description":"Older apps are invited to update"},"forceUpdate":{"type":"boolean","description":"Below latestAppVersion is blocking too"},"storeUrls":{"type":"object","properties":{"ios":{"anyOf":[{"type":"string","format":"uri"},{"type":"null"}]},"android":{"anyOf":[{"type":"string","format":"uri"},{"type":"null"}]}},"required":["ios","android"]},"webUrl":{"type":"string","format":"uri","description":"The website named in \"Manage your plan on …\""}},"required":["externalPurchases","minAppVersion","latestAppVersion","forceUpdate","storeUrls","webUrl"]},"updatedAt":{"type":["string","null"]}},"required":["externalPurchases","minAppVersion","latestAppVersion","forceUpdate","storeUrls","webUrl","defaults","updatedAt"]},"example":{"externalPurchases":{"android":"all","ios":"all","countries":["example"]},"minAppVersion":{"ios":"example","android":"example"},"latestAppVersion":{"ios":"example","android":"example"},"forceUpdate":true,"storeUrls":{"ios":"http://localhost:4000/example","android":"http://localhost:4000/example"},"webUrl":"http://localhost:4000/example","defaults":{"externalPurchases":{"android":"all","ios":"all","countries":["example"]},"minAppVersion":{"ios":"example","android":"example"},"latestAppVersion":{"ios":"example","android":"example"},"forceUpdate":true,"storeUrls":{"ios":"http://localhost:4000/example","android":"http://localhost:4000/example"},"webUrl":"http://localhost:4000/example"},"updatedAt":"2026-09-19T12:00:00.000Z"}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/mobile-config","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/mobile-config","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/mobile-config","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/mobile-config","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/mobile-config","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/mobile-config","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/mobile-config","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/mobile-config","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/mobile-config","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/mobile-config","traceId":"request-id"}}}}}},"put":{"operationId":"adminUpdateMobileConfig","tags":["Admin"],"summary":"Set the mobile app config: purchase links per platform, versions, store URLs. Audit-logged","description":"Requires admin permission billing.write. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"X-CSRF-Token","in":"header","required":false,"description":"Required for cookie-authenticated mutations; returned by sign-in/sign-up.","schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"externalPurchases":{"type":"object","properties":{"android":{"type":"string","enum":["all","allowed-countries","none"],"description":"Android: link to the web checkout"},"ios":{"type":"string","enum":["all","allowed-countries","none"],"description":"iOS: link to the web checkout (Apple: US storefront; EU only with the DMA entitlement)"},"countries":{"maxItems":60,"type":"array","items":{"type":"string","pattern":"^[A-Z]{2}$"},"description":"Where `allowed-countries` allows links (ISO 3166-1 alpha-2)"}},"required":["android","ios","countries"]},"minAppVersion":{"type":"object","properties":{"ios":{"type":"string","pattern":"^\\d{1,4}\\.\\d{1,4}\\.\\d{1,4}$"},"android":{"type":"string","pattern":"^\\d{1,4}\\.\\d{1,4}\\.\\d{1,4}$"}},"required":["ios","android"],"description":"Older apps must update (blocking screen)"},"latestAppVersion":{"type":"object","properties":{"ios":{"type":"string","pattern":"^\\d{1,4}\\.\\d{1,4}\\.\\d{1,4}$"},"android":{"type":"string","pattern":"^\\d{1,4}\\.\\d{1,4}\\.\\d{1,4}$"}},"required":["ios","android"],"description":"Older apps are invited to update"},"forceUpdate":{"type":"boolean","description":"Below latestAppVersion is blocking too"},"storeUrls":{"type":"object","properties":{"ios":{"anyOf":[{"type":"string","format":"uri"},{"type":"null"}]},"android":{"anyOf":[{"type":"string","format":"uri"},{"type":"null"}]}},"required":["ios","android"]},"webUrl":{"type":"string","format":"uri","description":"The website named in \"Manage your plan on …\""}},"required":["externalPurchases","minAppVersion","latestAppVersion","forceUpdate","storeUrls","webUrl"]},"example":{"externalPurchases":{"android":"all","ios":"all","countries":["example"]},"minAppVersion":{"ios":"example","android":"example"},"latestAppVersion":{"ios":"example","android":"example"},"forceUpdate":true,"storeUrls":{"ios":"http://localhost:4000/example","android":"http://localhost:4000/example"},"webUrl":"http://localhost:4000/example"}}}},"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"externalPurchases":{"type":"object","properties":{"android":{"type":"string","enum":["all","allowed-countries","none"],"description":"Android: link to the web checkout"},"ios":{"type":"string","enum":["all","allowed-countries","none"],"description":"iOS: link to the web checkout (Apple: US storefront; EU only with the DMA entitlement)"},"countries":{"maxItems":60,"type":"array","items":{"type":"string","pattern":"^[A-Z]{2}$"},"description":"Where `allowed-countries` allows links (ISO 3166-1 alpha-2)"}},"required":["android","ios","countries"]},"minAppVersion":{"type":"object","properties":{"ios":{"type":"string","pattern":"^\\d{1,4}\\.\\d{1,4}\\.\\d{1,4}$"},"android":{"type":"string","pattern":"^\\d{1,4}\\.\\d{1,4}\\.\\d{1,4}$"}},"required":["ios","android"],"description":"Older apps must update (blocking screen)"},"latestAppVersion":{"type":"object","properties":{"ios":{"type":"string","pattern":"^\\d{1,4}\\.\\d{1,4}\\.\\d{1,4}$"},"android":{"type":"string","pattern":"^\\d{1,4}\\.\\d{1,4}\\.\\d{1,4}$"}},"required":["ios","android"],"description":"Older apps are invited to update"},"forceUpdate":{"type":"boolean","description":"Below latestAppVersion is blocking too"},"storeUrls":{"type":"object","properties":{"ios":{"anyOf":[{"type":"string","format":"uri"},{"type":"null"}]},"android":{"anyOf":[{"type":"string","format":"uri"},{"type":"null"}]}},"required":["ios","android"]},"webUrl":{"type":"string","format":"uri","description":"The website named in \"Manage your plan on …\""},"defaults":{"type":"object","properties":{"externalPurchases":{"type":"object","properties":{"android":{"type":"string","enum":["all","allowed-countries","none"],"description":"Android: link to the web checkout"},"ios":{"type":"string","enum":["all","allowed-countries","none"],"description":"iOS: link to the web checkout (Apple: US storefront; EU only with the DMA entitlement)"},"countries":{"maxItems":60,"type":"array","items":{"type":"string","pattern":"^[A-Z]{2}$"},"description":"Where `allowed-countries` allows links (ISO 3166-1 alpha-2)"}},"required":["android","ios","countries"]},"minAppVersion":{"type":"object","properties":{"ios":{"type":"string","pattern":"^\\d{1,4}\\.\\d{1,4}\\.\\d{1,4}$"},"android":{"type":"string","pattern":"^\\d{1,4}\\.\\d{1,4}\\.\\d{1,4}$"}},"required":["ios","android"],"description":"Older apps must update (blocking screen)"},"latestAppVersion":{"type":"object","properties":{"ios":{"type":"string","pattern":"^\\d{1,4}\\.\\d{1,4}\\.\\d{1,4}$"},"android":{"type":"string","pattern":"^\\d{1,4}\\.\\d{1,4}\\.\\d{1,4}$"}},"required":["ios","android"],"description":"Older apps are invited to update"},"forceUpdate":{"type":"boolean","description":"Below latestAppVersion is blocking too"},"storeUrls":{"type":"object","properties":{"ios":{"anyOf":[{"type":"string","format":"uri"},{"type":"null"}]},"android":{"anyOf":[{"type":"string","format":"uri"},{"type":"null"}]}},"required":["ios","android"]},"webUrl":{"type":"string","format":"uri","description":"The website named in \"Manage your plan on …\""}},"required":["externalPurchases","minAppVersion","latestAppVersion","forceUpdate","storeUrls","webUrl"]},"updatedAt":{"type":["string","null"]}},"required":["externalPurchases","minAppVersion","latestAppVersion","forceUpdate","storeUrls","webUrl","defaults","updatedAt"]},"example":{"externalPurchases":{"android":"all","ios":"all","countries":["example"]},"minAppVersion":{"ios":"example","android":"example"},"latestAppVersion":{"ios":"example","android":"example"},"forceUpdate":true,"storeUrls":{"ios":"http://localhost:4000/example","android":"http://localhost:4000/example"},"webUrl":"http://localhost:4000/example","defaults":{"externalPurchases":{"android":"all","ios":"all","countries":["example"]},"minAppVersion":{"ios":"example","android":"example"},"latestAppVersion":{"ios":"example","android":"example"},"forceUpdate":true,"storeUrls":{"ios":"http://localhost:4000/example","android":"http://localhost:4000/example"},"webUrl":"http://localhost:4000/example"},"updatedAt":"2026-09-19T12:00:00.000Z"}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/mobile-config","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/mobile-config","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/mobile-config","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/mobile-config","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/mobile-config","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/mobile-config","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/mobile-config","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/mobile-config","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/mobile-config","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/mobile-config","traceId":"request-id"}}}}}}},"/v1/admin/audio-watermark":{"get":{"operationId":"adminGetAudioWatermark","tags":["Admin"],"summary":"Audio watermark setting (app_settings audioWatermark) with the defaults: on/off, owner countries, Arabic and English tag text","description":"Requires admin permission billing.read. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false}],"security":[{"session":[]},{"apiKey":[]}],"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"enabled":{"type":"boolean","description":"Append the spoken tag to free audio in the listed countries"},"countries":{"maxItems":250,"type":"array","items":{"type":"string"},"description":"Owner countries (ISO 3166-1 alpha-2) whose free workspaces get the tag; unknown country never does"},"text":{"type":"object","properties":{"ar":{"type":"string","minLength":2,"maxLength":80,"description":"Arabic tag (Arabic generations, else Arabic interface)"},"en":{"type":"string","minLength":2,"maxLength":80,"description":"English tag (everyone else)"}},"required":["ar","en"],"additionalProperties":false},"defaults":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Append the spoken tag to free audio in the listed countries"},"countries":{"maxItems":250,"type":"array","items":{"type":"string"},"description":"Owner countries (ISO 3166-1 alpha-2) whose free workspaces get the tag; unknown country never does"},"text":{"type":"object","properties":{"ar":{"type":"string","minLength":2,"maxLength":80,"description":"Arabic tag (Arabic generations, else Arabic interface)"},"en":{"type":"string","minLength":2,"maxLength":80,"description":"English tag (everyone else)"}},"required":["ar","en"],"additionalProperties":false}},"required":["enabled","countries","text"],"additionalProperties":false},"updatedAt":{"type":["string","null"]}},"required":["enabled","countries","text","defaults","updatedAt"],"additionalProperties":false},"example":{"enabled":true,"countries":["example"],"text":{"ar":"مثال","en":"example"},"defaults":{"enabled":true,"countries":["example"],"text":{"ar":"مثال","en":"example"}},"updatedAt":"2026-09-19T12:00:00.000Z"}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/audio-watermark","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/audio-watermark","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/audio-watermark","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/audio-watermark","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/audio-watermark","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/audio-watermark","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/audio-watermark","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/audio-watermark","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/audio-watermark","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/audio-watermark","traceId":"request-id"}}}}}},"put":{"operationId":"adminUpdateAudioWatermark","tags":["Admin"],"summary":"Set the audio watermark: on/off, owner countries (free plan only) and the spoken tag text. Audit-logged","description":"Requires admin permission billing.write. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"X-CSRF-Token","in":"header","required":false,"description":"Required for cookie-authenticated mutations; returned by sign-in/sign-up.","schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"enabled":{"type":"boolean","description":"Append the spoken tag to free audio in the listed countries"},"countries":{"maxItems":250,"type":"array","items":{"type":"string"},"description":"Owner countries (ISO 3166-1 alpha-2) whose free workspaces get the tag; unknown country never does"},"text":{"type":"object","properties":{"ar":{"type":"string","minLength":2,"maxLength":80,"description":"Arabic tag (Arabic generations, else Arabic interface)"},"en":{"type":"string","minLength":2,"maxLength":80,"description":"English tag (everyone else)"}},"required":["ar","en"],"additionalProperties":false}},"required":["enabled","countries","text"],"additionalProperties":false},"example":{"enabled":true,"countries":["example"],"text":{"ar":"مثال","en":"example"}}}}},"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"enabled":{"type":"boolean","description":"Append the spoken tag to free audio in the listed countries"},"countries":{"maxItems":250,"type":"array","items":{"type":"string"},"description":"Owner countries (ISO 3166-1 alpha-2) whose free workspaces get the tag; unknown country never does"},"text":{"type":"object","properties":{"ar":{"type":"string","minLength":2,"maxLength":80,"description":"Arabic tag (Arabic generations, else Arabic interface)"},"en":{"type":"string","minLength":2,"maxLength":80,"description":"English tag (everyone else)"}},"required":["ar","en"],"additionalProperties":false},"defaults":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Append the spoken tag to free audio in the listed countries"},"countries":{"maxItems":250,"type":"array","items":{"type":"string"},"description":"Owner countries (ISO 3166-1 alpha-2) whose free workspaces get the tag; unknown country never does"},"text":{"type":"object","properties":{"ar":{"type":"string","minLength":2,"maxLength":80,"description":"Arabic tag (Arabic generations, else Arabic interface)"},"en":{"type":"string","minLength":2,"maxLength":80,"description":"English tag (everyone else)"}},"required":["ar","en"],"additionalProperties":false}},"required":["enabled","countries","text"],"additionalProperties":false},"updatedAt":{"type":["string","null"]}},"required":["enabled","countries","text","defaults","updatedAt"],"additionalProperties":false},"example":{"enabled":true,"countries":["example"],"text":{"ar":"مثال","en":"example"},"defaults":{"enabled":true,"countries":["example"],"text":{"ar":"مثال","en":"example"}},"updatedAt":"2026-09-19T12:00:00.000Z"}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/audio-watermark","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/audio-watermark","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/audio-watermark","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/audio-watermark","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/audio-watermark","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/audio-watermark","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/audio-watermark","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/audio-watermark","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/audio-watermark","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/audio-watermark","traceId":"request-id"}}}}}}},"/v1/admin/experiments/chatgpt-landing":{"get":{"operationId":"adminGetChatGptLanding","tags":["Admin"],"summary":"The chatgpt-landing experiment: settings (on/off, rollout %, salt, start) and results per arm computed from the database: enrolled users, first generation (any, and within 24 hours of sign-up), activated (3+ successful generations), started checkout and paid, with the difference in points and a two-proportion z-test p-value","description":"Requires admin permission overview.read. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false}],"security":[{"session":[]},{"apiKey":[]}],"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"experiment":{"type":"string","const":"chatgpt-landing"},"config":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Enrol new ChatGPT sign-ups and send variant users to the studio; off = everyone gets the usual flow (stored assignments are kept)"},"rolloutPercent":{"type":"integer","minimum":0,"maximum":100,"description":"Share of enrolled users (0-100) who get the variant; affects new enrolments only"},"salt":{"type":"string","minLength":1,"maxLength":100,"description":"Hash salt of the assignment (sha256(salt:userId)); changing it reshuffles new enrolments only"},"startedAt":{"anyOf":[{"type":"string","maxLength":40},{"type":"null"}],"description":"When the experiment was started (ISO 8601), null until known"}},"required":["enabled","rolloutPercent","salt","startedAt"],"additionalProperties":false},"defaults":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Enrol new ChatGPT sign-ups and send variant users to the studio; off = everyone gets the usual flow (stored assignments are kept)"},"rolloutPercent":{"type":"integer","minimum":0,"maximum":100,"description":"Share of enrolled users (0-100) who get the variant; affects new enrolments only"},"salt":{"type":"string","minLength":1,"maxLength":100,"description":"Hash salt of the assignment (sha256(salt:userId)); changing it reshuffles new enrolments only"},"startedAt":{"anyOf":[{"type":"string","maxLength":40},{"type":"null"}],"description":"When the experiment was started (ISO 8601), null until known"}},"required":["enabled","rolloutPercent","salt","startedAt"],"additionalProperties":false},"updatedAt":{"description":"When the setting was last saved; null = defaults","type":["string","null"]},"status":{"type":"string","enum":["running","paused"]},"startedAt":{"description":"config.startedAt, else the first enrolment","type":["string","null"]},"firstEnrolledAt":{"type":["string","null"]},"lastEnrolledAt":{"type":["string","null"]},"minUsersPerArm":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"enoughData":{"type":"boolean","description":"Both arms have at least minUsersPerArm users"},"arms":{"type":"object","properties":{"control":{"type":"object","properties":{"enrolled":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}},"required":["enrolled"]},"variant":{"type":"object","properties":{"enrolled":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}},"required":["enrolled"]}},"required":["control","variant"]},"metrics":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string","enum":["firstGeneration","firstGeneration24h","activated","startedCheckout","paid"]},"control":{"type":"object","properties":{"count":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"rate":{"description":"count ÷ enrolled (0-1), null with no users","type":["number","null"]}},"required":["count","rate"]},"variant":{"type":"object","properties":{"count":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"rate":{"description":"count ÷ enrolled (0-1), null with no users","type":["number","null"]}},"required":["count","rate"]},"diffPoints":{"description":"variant rate − control rate, in percentage points","type":["number","null"]},"pValue":{"description":"Two-sided two-proportion z-test p-value","type":["number","null"]}},"required":["key","control","variant","diffPoints","pValue"]}},"generatedAt":{"type":"string"}},"required":["experiment","config","defaults","updatedAt","status","startedAt","firstEnrolledAt","lastEnrolledAt","minUsersPerArm","enoughData","arms","metrics","generatedAt"]},"example":{"experiment":"chatgpt-landing","config":{"enabled":true,"rolloutPercent":0,"salt":"example","startedAt":"2026-09-19T12:00:00.000Z"},"defaults":{"enabled":true,"rolloutPercent":0,"salt":"example","startedAt":"2026-09-19T12:00:00.000Z"},"updatedAt":"2026-09-19T12:00:00.000Z","status":"running","startedAt":"2026-09-19T12:00:00.000Z","firstEnrolledAt":"2026-09-19T12:00:00.000Z","lastEnrolledAt":"2026-09-19T12:00:00.000Z","minUsersPerArm":-9007199254740991,"enoughData":true,"arms":{"control":{"enrolled":-9007199254740991},"variant":{"enrolled":-9007199254740991}},"metrics":[{"key":"firstGeneration","control":{"count":-9007199254740991,"rate":"example"},"variant":{"count":-9007199254740991,"rate":"example"},"diffPoints":"example","pValue":"example"}],"generatedAt":"2026-09-19T12:00:00.000Z"}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/experiments/chatgpt-landing","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/experiments/chatgpt-landing","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/experiments/chatgpt-landing","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/experiments/chatgpt-landing","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/experiments/chatgpt-landing","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/experiments/chatgpt-landing","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/experiments/chatgpt-landing","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/experiments/chatgpt-landing","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/experiments/chatgpt-landing","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/experiments/chatgpt-landing","traceId":"request-id"}}}}}},"put":{"operationId":"adminUpdateChatGptLanding","tags":["Admin"],"summary":"Switch the chatgpt-landing experiment on or off and set its rollout % (new enrolments only; stored assignments never change). Audit-logged","description":"Requires admin permission models.write. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"X-CSRF-Token","in":"header","required":false,"description":"Required for cookie-authenticated mutations; returned by sign-in/sign-up.","schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"enabled":{"type":"boolean"},"rolloutPercent":{"type":"integer","minimum":0,"maximum":100}},"required":["enabled","rolloutPercent"],"additionalProperties":false},"example":{"enabled":true,"rolloutPercent":0}}}},"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"experiment":{"type":"string","const":"chatgpt-landing"},"config":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Enrol new ChatGPT sign-ups and send variant users to the studio; off = everyone gets the usual flow (stored assignments are kept)"},"rolloutPercent":{"type":"integer","minimum":0,"maximum":100,"description":"Share of enrolled users (0-100) who get the variant; affects new enrolments only"},"salt":{"type":"string","minLength":1,"maxLength":100,"description":"Hash salt of the assignment (sha256(salt:userId)); changing it reshuffles new enrolments only"},"startedAt":{"anyOf":[{"type":"string","maxLength":40},{"type":"null"}],"description":"When the experiment was started (ISO 8601), null until known"}},"required":["enabled","rolloutPercent","salt","startedAt"],"additionalProperties":false},"defaults":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Enrol new ChatGPT sign-ups and send variant users to the studio; off = everyone gets the usual flow (stored assignments are kept)"},"rolloutPercent":{"type":"integer","minimum":0,"maximum":100,"description":"Share of enrolled users (0-100) who get the variant; affects new enrolments only"},"salt":{"type":"string","minLength":1,"maxLength":100,"description":"Hash salt of the assignment (sha256(salt:userId)); changing it reshuffles new enrolments only"},"startedAt":{"anyOf":[{"type":"string","maxLength":40},{"type":"null"}],"description":"When the experiment was started (ISO 8601), null until known"}},"required":["enabled","rolloutPercent","salt","startedAt"],"additionalProperties":false},"updatedAt":{"description":"When the setting was last saved; null = defaults","type":["string","null"]},"status":{"type":"string","enum":["running","paused"]},"startedAt":{"description":"config.startedAt, else the first enrolment","type":["string","null"]},"firstEnrolledAt":{"type":["string","null"]},"lastEnrolledAt":{"type":["string","null"]},"minUsersPerArm":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"enoughData":{"type":"boolean","description":"Both arms have at least minUsersPerArm users"},"arms":{"type":"object","properties":{"control":{"type":"object","properties":{"enrolled":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}},"required":["enrolled"]},"variant":{"type":"object","properties":{"enrolled":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}},"required":["enrolled"]}},"required":["control","variant"]},"metrics":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string","enum":["firstGeneration","firstGeneration24h","activated","startedCheckout","paid"]},"control":{"type":"object","properties":{"count":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"rate":{"description":"count ÷ enrolled (0-1), null with no users","type":["number","null"]}},"required":["count","rate"]},"variant":{"type":"object","properties":{"count":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"rate":{"description":"count ÷ enrolled (0-1), null with no users","type":["number","null"]}},"required":["count","rate"]},"diffPoints":{"description":"variant rate − control rate, in percentage points","type":["number","null"]},"pValue":{"description":"Two-sided two-proportion z-test p-value","type":["number","null"]}},"required":["key","control","variant","diffPoints","pValue"]}},"generatedAt":{"type":"string"}},"required":["experiment","config","defaults","updatedAt","status","startedAt","firstEnrolledAt","lastEnrolledAt","minUsersPerArm","enoughData","arms","metrics","generatedAt"]},"example":{"experiment":"chatgpt-landing","config":{"enabled":true,"rolloutPercent":0,"salt":"example","startedAt":"2026-09-19T12:00:00.000Z"},"defaults":{"enabled":true,"rolloutPercent":0,"salt":"example","startedAt":"2026-09-19T12:00:00.000Z"},"updatedAt":"2026-09-19T12:00:00.000Z","status":"running","startedAt":"2026-09-19T12:00:00.000Z","firstEnrolledAt":"2026-09-19T12:00:00.000Z","lastEnrolledAt":"2026-09-19T12:00:00.000Z","minUsersPerArm":-9007199254740991,"enoughData":true,"arms":{"control":{"enrolled":-9007199254740991},"variant":{"enrolled":-9007199254740991}},"metrics":[{"key":"firstGeneration","control":{"count":-9007199254740991,"rate":"example"},"variant":{"count":-9007199254740991,"rate":"example"},"diffPoints":"example","pValue":"example"}],"generatedAt":"2026-09-19T12:00:00.000Z"}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/experiments/chatgpt-landing","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/experiments/chatgpt-landing","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/experiments/chatgpt-landing","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/experiments/chatgpt-landing","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/experiments/chatgpt-landing","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/experiments/chatgpt-landing","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/experiments/chatgpt-landing","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/experiments/chatgpt-landing","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/experiments/chatgpt-landing","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/experiments/chatgpt-landing","traceId":"request-id"}}}}}}},"/v1/admin/clone-voice-model":{"get":{"operationId":"adminGetCloneVoiceModel","tags":["Admin"],"summary":"The Fish model cloned voices are spoken with: the admin override, the server default (FISH_TTS_MODEL), cost per million bytes and the routes it applies to","description":"Requires admin permission providers.read. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false}],"security":[{"session":[]},{"apiKey":[]}],"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"model":{"type":"string","description":"The model cloned voices are spoken with now"},"override":{"description":"The admin override (app_settings cloneVoiceModel), null when the server default applies","type":["string","null"]},"envModel":{"type":"string","description":"The server default (FISH_TTS_MODEL)"},"costPerMillionBytesUsd":{"description":"Fish cost per million bytes on the routes","type":["number","null"]},"routes":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Fish routes (speak and make, per product model) the model applies to"},"configured":{"type":"boolean","description":"FISH_API_KEY is set (cloning is on)"},"suggestions":{"type":"array","items":{"type":"string"}},"updatedAt":{"type":["string","null"]}},"required":["model","override","envModel","costPerMillionBytesUsd","routes","configured","suggestions","updatedAt"]},"example":{"model":"example","override":"example","envModel":"example","costPerMillionBytesUsd":"example","routes":-9007199254740991,"configured":true,"suggestions":["example"],"updatedAt":"2026-09-19T12:00:00.000Z"}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/clone-voice-model","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/clone-voice-model","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/clone-voice-model","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/clone-voice-model","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/clone-voice-model","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/clone-voice-model","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/clone-voice-model","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/clone-voice-model","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/clone-voice-model","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/clone-voice-model","traceId":"request-id"}}}}}},"put":{"operationId":"adminUpdateCloneVoiceModel","tags":["Admin"],"summary":"Override the Fish model for cloned voices (null goes back to FISH_TTS_MODEL) and its cost per million bytes; every Fish route switches at once and the override survives deploys. Audit-logged","description":"Requires admin permission providers.write. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"X-CSRF-Token","in":"header","required":false,"description":"Required for cookie-authenticated mutations; returned by sign-in/sign-up.","schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"model":{"anyOf":[{"type":"string","pattern":"^[A-Za-z0-9][A-Za-z0-9._-]{1,63}$"},{"type":"null"}],"description":"Fish model for cloned voices; null drops the override and goes back to the server FISH_TTS_MODEL"},"costPerMillionBytesUsd":{"description":"What Fish charges per million UTF-8 bytes on this model (margins and usage cost)","type":"number","exclusiveMinimum":0,"maximum":1000}},"required":["model"],"additionalProperties":false},"example":{"model":"example","costPerMillionBytesUsd":1}}}},"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"model":{"type":"string","description":"The model cloned voices are spoken with now"},"override":{"description":"The admin override (app_settings cloneVoiceModel), null when the server default applies","type":["string","null"]},"envModel":{"type":"string","description":"The server default (FISH_TTS_MODEL)"},"costPerMillionBytesUsd":{"description":"Fish cost per million bytes on the routes","type":["number","null"]},"routes":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Fish routes (speak and make, per product model) the model applies to"},"configured":{"type":"boolean","description":"FISH_API_KEY is set (cloning is on)"},"suggestions":{"type":"array","items":{"type":"string"}},"updatedAt":{"type":["string","null"]}},"required":["model","override","envModel","costPerMillionBytesUsd","routes","configured","suggestions","updatedAt"]},"example":{"model":"example","override":"example","envModel":"example","costPerMillionBytesUsd":"example","routes":-9007199254740991,"configured":true,"suggestions":["example"],"updatedAt":"2026-09-19T12:00:00.000Z"}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/clone-voice-model","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/clone-voice-model","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/clone-voice-model","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/clone-voice-model","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/clone-voice-model","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/clone-voice-model","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/clone-voice-model","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/clone-voice-model","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/clone-voice-model","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/clone-voice-model","traceId":"request-id"}}}}}}},"/v1/admin/tts-tags":{"get":{"operationId":"adminGetTagCatalog","tags":["Admin"],"summary":"The tag catalogue: every vendor entry with the admin changes over it (modified, custom, switched off), the version in force and the Auto Tags settings with 30-day usage","description":"Requires admin permission models.read. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false}],"security":[{"session":[]},{"apiKey":[]}],"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"entries":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string","description":"type:id"},"entry":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}},"origin":{"type":"string","enum":["vendor","modified","custom"],"description":"vendor = as the vendors document it; modified = a vendor entry edited here; custom = added here"},"enabled":{"type":"boolean"},"vendorDefault":{"anyOf":[{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}},{"type":"null"}],"description":"The vendor entry this one overrides (modified), to compare and restore"}},"required":["key","entry","origin","enabled","vendorDefault"]}},"version":{"type":"string","description":"Changes whenever the catalogue in force does"},"updatedAt":{"type":["string","null"]},"autoTags":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Auto Tags on for every plan that includes it"},"credits":{"type":"integer","minimum":1,"maximum":100000,"description":"Credits a run costs above the last word step (only when it adds tags)"},"tiers":{"description":"Word-count steps, shortest first; a script longer than the last step costs `credits`","maxItems":8,"type":"array","items":{"type":"object","properties":{"upToWords":{"type":"integer","minimum":1,"maximum":100000},"credits":{"type":"integer","minimum":1,"maximum":100000}},"required":["upToWords","credits"],"additionalProperties":false}},"updatedAt":{"type":["string","null"]},"runs30d":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"credits30d":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}},"required":["enabled","credits","updatedAt","runs30d","credits30d"],"additionalProperties":false},"sources":{"type":"array","items":{"type":"object","properties":{"vendor":{"type":"string","enum":["gemini","drama"],"description":"gemini = catalogue voices (Gemini 3.8 TTS); drama = cloned voices (Fish Audio Drama 3)"},"name":{"type":"string"},"url":{"type":"string"}},"required":["vendor","name","url"]}}},"required":["entries","version","updatedAt","autoTags","sources"]},"example":{"entries":[{"key":"example","entry":{},"origin":"vendor","enabled":true,"vendorDefault":{}}],"version":"example","updatedAt":"2026-09-19T12:00:00.000Z","autoTags":{"enabled":true,"credits":1,"tiers":[{"upToWords":1,"credits":1}],"updatedAt":"2026-09-19T12:00:00.000Z","runs30d":-9007199254740991,"credits30d":-9007199254740991},"sources":[{"vendor":"gemini","name":"Noura","url":"example"}]}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/tts-tags","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/tts-tags","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/tts-tags","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/tts-tags","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/tts-tags","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/tts-tags","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/tts-tags","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/tts-tags","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/tts-tags","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/tts-tags","traceId":"request-id"}}}}}}},"/v1/admin/tts-tags/entry":{"put":{"operationId":"adminPutTagEntry","tags":["Admin"],"summary":"Add a tag, edit one (a vendor entry becomes modified) or switch it on or off; refused when a name would read as two tags (422 errors[0].code=conflict). Applied by every server within seconds. Audit-logged","description":"Requires admin permission models.write. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"X-CSRF-Token","in":"header","required":false,"description":"Required for cookie-authenticated mutations; returned by sign-in/sign-up.","schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"entry":{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":48,"pattern":"^[\\p{L}\\p{M}][\\p{L}\\p{M}\\p{N} '-]*$","description":"Canonical name written in scripts, English (e.g. laugh, shaky breath)"},"type":{"type":"string","enum":["sound","span","direction"]},"group":{"type":"string","minLength":1,"maxLength":24,"pattern":"^[a-z]+$","description":"Palette section: breath, laughter, emotion, vocal, crowd (sounds); delivery, emotion (directions); word (spans)"},"label":{"type":"object","properties":{"ar":{"type":"string","minLength":1,"maxLength":40},"en":{"type":"string","minLength":1,"maxLength":40}},"required":["ar","en"],"additionalProperties":false},"description":{"type":"object","properties":{"ar":{"type":"string","minLength":1,"maxLength":160},"en":{"type":"string","minLength":1,"maxLength":160}},"required":["ar","en"],"additionalProperties":false},"aliases":{"maxItems":30,"type":"array","items":{"type":"string","minLength":1,"maxLength":48,"pattern":"^[\\p{L}\\p{M}][\\p{L}\\p{M}\\p{N} '-]*$"},"description":"Other spellings accepted in scripts, Arabic included"},"example":{"type":"object","properties":{"ar":{"type":"string","minLength":1,"maxLength":200},"en":{"type":"string","minLength":1,"maxLength":200}},"required":["ar","en"],"additionalProperties":false},"vendors":{"type":"object","properties":{"gemini":{"description":"Sounds: the Gemini 3.8 inline form, e.g. <laugh>; directions: the style text","type":"string","maxLength":60,"pattern":"^(<[a-z][a-z -]{0,40}>|[^[\\]<>]{1,60})$"},"drama":{"description":"Sounds: the Drama 3 bracket form, e.g. [laugh]; spans: the paired tag name, e.g. whisper; directions: the text","type":"string","maxLength":60,"pattern":"^(\\[[^[\\]]{1,58}\\]|[a-z]{1,20}|[^[\\]<>]{1,60})$"}},"additionalProperties":false},"style":{"description":"Directions and spans: the short English delivery sent to the vendor","type":"string","maxLength":80},"instruction":{"description":"Directions and spans: the full instruction for instruction-only models","type":"string","maxLength":200},"gainDb":{"type":"number","minimum":-12,"maximum":6},"reset":{"type":"boolean"},"enabled":{"type":"boolean"},"source":{"type":"string","maxLength":300,"format":"uri"}},"required":["id","type","group","label","description","aliases","example","vendors"],"additionalProperties":false},"enabled":{"default":true,"type":"boolean"}},"required":["entry"],"additionalProperties":false},"example":{"entry":{"id":"example","type":"sound","group":"example","label":{"ar":"مثال","en":"example"},"description":{"ar":"مثال","en":"example"},"aliases":["example"],"example":{"ar":"مثال","en":"example"},"vendors":{"gemini":"example","drama":"example"},"style":"example","instruction":"example","gainDb":-12,"reset":true,"enabled":true,"source":"http://localhost:4000/example"},"enabled":true}}}},"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"entries":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string","description":"type:id"},"entry":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}},"origin":{"type":"string","enum":["vendor","modified","custom"],"description":"vendor = as the vendors document it; modified = a vendor entry edited here; custom = added here"},"enabled":{"type":"boolean"},"vendorDefault":{"anyOf":[{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}},{"type":"null"}],"description":"The vendor entry this one overrides (modified), to compare and restore"}},"required":["key","entry","origin","enabled","vendorDefault"]}},"version":{"type":"string","description":"Changes whenever the catalogue in force does"},"updatedAt":{"type":["string","null"]},"autoTags":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Auto Tags on for every plan that includes it"},"credits":{"type":"integer","minimum":1,"maximum":100000,"description":"Credits a run costs above the last word step (only when it adds tags)"},"tiers":{"description":"Word-count steps, shortest first; a script longer than the last step costs `credits`","maxItems":8,"type":"array","items":{"type":"object","properties":{"upToWords":{"type":"integer","minimum":1,"maximum":100000},"credits":{"type":"integer","minimum":1,"maximum":100000}},"required":["upToWords","credits"],"additionalProperties":false}},"updatedAt":{"type":["string","null"]},"runs30d":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"credits30d":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}},"required":["enabled","credits","updatedAt","runs30d","credits30d"],"additionalProperties":false},"sources":{"type":"array","items":{"type":"object","properties":{"vendor":{"type":"string","enum":["gemini","drama"],"description":"gemini = catalogue voices (Gemini 3.8 TTS); drama = cloned voices (Fish Audio Drama 3)"},"name":{"type":"string"},"url":{"type":"string"}},"required":["vendor","name","url"]}}},"required":["entries","version","updatedAt","autoTags","sources"]},"example":{"entries":[{"key":"example","entry":{},"origin":"vendor","enabled":true,"vendorDefault":{}}],"version":"example","updatedAt":"2026-09-19T12:00:00.000Z","autoTags":{"enabled":true,"credits":1,"tiers":[{"upToWords":1,"credits":1}],"updatedAt":"2026-09-19T12:00:00.000Z","runs30d":-9007199254740991,"credits30d":-9007199254740991},"sources":[{"vendor":"gemini","name":"Noura","url":"example"}]}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/tts-tags/entry","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/tts-tags/entry","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/tts-tags/entry","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/tts-tags/entry","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/tts-tags/entry","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/tts-tags/entry","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/tts-tags/entry","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/tts-tags/entry","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/tts-tags/entry","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/tts-tags/entry","traceId":"request-id"}}}}}}},"/v1/admin/tts-tags/entry/reset":{"post":{"operationId":"adminResetTagEntry","tags":["Admin"],"summary":"Restore a modified or switched-off entry to the vendor default, or delete a custom one. Audit-logged","description":"Requires admin permission models.write. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"X-CSRF-Token","in":"header","required":false,"description":"Required for cookie-authenticated mutations; returned by sign-in/sign-up.","schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string","enum":["sound","span","direction"]},"id":{"type":"string","minLength":1,"maxLength":48}},"required":["type","id"],"additionalProperties":false},"example":{"type":"sound","id":"example"}}}},"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"entries":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string","description":"type:id"},"entry":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}},"origin":{"type":"string","enum":["vendor","modified","custom"],"description":"vendor = as the vendors document it; modified = a vendor entry edited here; custom = added here"},"enabled":{"type":"boolean"},"vendorDefault":{"anyOf":[{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}},{"type":"null"}],"description":"The vendor entry this one overrides (modified), to compare and restore"}},"required":["key","entry","origin","enabled","vendorDefault"]}},"version":{"type":"string","description":"Changes whenever the catalogue in force does"},"updatedAt":{"type":["string","null"]},"autoTags":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Auto Tags on for every plan that includes it"},"credits":{"type":"integer","minimum":1,"maximum":100000,"description":"Credits a run costs above the last word step (only when it adds tags)"},"tiers":{"description":"Word-count steps, shortest first; a script longer than the last step costs `credits`","maxItems":8,"type":"array","items":{"type":"object","properties":{"upToWords":{"type":"integer","minimum":1,"maximum":100000},"credits":{"type":"integer","minimum":1,"maximum":100000}},"required":["upToWords","credits"],"additionalProperties":false}},"updatedAt":{"type":["string","null"]},"runs30d":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"credits30d":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}},"required":["enabled","credits","updatedAt","runs30d","credits30d"],"additionalProperties":false},"sources":{"type":"array","items":{"type":"object","properties":{"vendor":{"type":"string","enum":["gemini","drama"],"description":"gemini = catalogue voices (Gemini 3.8 TTS); drama = cloned voices (Fish Audio Drama 3)"},"name":{"type":"string"},"url":{"type":"string"}},"required":["vendor","name","url"]}}},"required":["entries","version","updatedAt","autoTags","sources"]},"example":{"entries":[{"key":"example","entry":{},"origin":"vendor","enabled":true,"vendorDefault":{}}],"version":"example","updatedAt":"2026-09-19T12:00:00.000Z","autoTags":{"enabled":true,"credits":1,"tiers":[{"upToWords":1,"credits":1}],"updatedAt":"2026-09-19T12:00:00.000Z","runs30d":-9007199254740991,"credits30d":-9007199254740991},"sources":[{"vendor":"gemini","name":"Noura","url":"example"}]}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/tts-tags/entry/reset","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/tts-tags/entry/reset","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/tts-tags/entry/reset","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/tts-tags/entry/reset","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/tts-tags/entry/reset","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/tts-tags/entry/reset","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/tts-tags/entry/reset","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/tts-tags/entry/reset","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/tts-tags/entry/reset","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/tts-tags/entry/reset","traceId":"request-id"}}}}}}},"/v1/admin/auto-tags":{"put":{"operationId":"adminUpdateAutoTags","tags":["Admin"],"summary":"Auto Tags on/off and credits per run. Audit-logged","description":"Requires admin permission models.write. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"X-CSRF-Token","in":"header","required":false,"description":"Required for cookie-authenticated mutations; returned by sign-in/sign-up.","schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"enabled":{"type":"boolean","description":"Auto Tags on for every plan that includes it"},"credits":{"type":"integer","minimum":1,"maximum":100000,"description":"Credits a run costs above the last word step (only when it adds tags)"},"tiers":{"description":"Word-count steps, shortest first; a script longer than the last step costs `credits`","maxItems":8,"type":"array","items":{"type":"object","properties":{"upToWords":{"type":"integer","minimum":1,"maximum":100000},"credits":{"type":"integer","minimum":1,"maximum":100000}},"required":["upToWords","credits"],"additionalProperties":false}}},"required":["enabled","credits"],"additionalProperties":false},"example":{"enabled":true,"credits":1,"tiers":[{"upToWords":1,"credits":1}]}}}},"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"entries":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string","description":"type:id"},"entry":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}},"origin":{"type":"string","enum":["vendor","modified","custom"],"description":"vendor = as the vendors document it; modified = a vendor entry edited here; custom = added here"},"enabled":{"type":"boolean"},"vendorDefault":{"anyOf":[{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}},{"type":"null"}],"description":"The vendor entry this one overrides (modified), to compare and restore"}},"required":["key","entry","origin","enabled","vendorDefault"]}},"version":{"type":"string","description":"Changes whenever the catalogue in force does"},"updatedAt":{"type":["string","null"]},"autoTags":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Auto Tags on for every plan that includes it"},"credits":{"type":"integer","minimum":1,"maximum":100000,"description":"Credits a run costs above the last word step (only when it adds tags)"},"tiers":{"description":"Word-count steps, shortest first; a script longer than the last step costs `credits`","maxItems":8,"type":"array","items":{"type":"object","properties":{"upToWords":{"type":"integer","minimum":1,"maximum":100000},"credits":{"type":"integer","minimum":1,"maximum":100000}},"required":["upToWords","credits"],"additionalProperties":false}},"updatedAt":{"type":["string","null"]},"runs30d":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"credits30d":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}},"required":["enabled","credits","updatedAt","runs30d","credits30d"],"additionalProperties":false},"sources":{"type":"array","items":{"type":"object","properties":{"vendor":{"type":"string","enum":["gemini","drama"],"description":"gemini = catalogue voices (Gemini 3.8 TTS); drama = cloned voices (Fish Audio Drama 3)"},"name":{"type":"string"},"url":{"type":"string"}},"required":["vendor","name","url"]}}},"required":["entries","version","updatedAt","autoTags","sources"]},"example":{"entries":[{"key":"example","entry":{},"origin":"vendor","enabled":true,"vendorDefault":{}}],"version":"example","updatedAt":"2026-09-19T12:00:00.000Z","autoTags":{"enabled":true,"credits":1,"tiers":[{"upToWords":1,"credits":1}],"updatedAt":"2026-09-19T12:00:00.000Z","runs30d":-9007199254740991,"credits30d":-9007199254740991},"sources":[{"vendor":"gemini","name":"Noura","url":"example"}]}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/auto-tags","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/auto-tags","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/auto-tags","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/auto-tags","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/auto-tags","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/auto-tags","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/auto-tags","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/auto-tags","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/auto-tags","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/auto-tags","traceId":"request-id"}}}}}}},"/v1/admin/neo":{"get":{"operationId":"adminGetNeo","tags":["Admin"],"summary":"Neo settings with defaults: on/off, plans, credits per message, brain (Anthropic model + OpenRouter fallback), voice replies, tools, instructions","description":"Requires admin permission models.read. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false}],"security":[{"session":[]},{"apiKey":[]}],"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"enabled":{"type":"boolean","description":"Neo on/off for everyone"},"plans":{"anyOf":[{"maxItems":50,"type":"array","items":{"type":"string","minLength":1,"maxLength":40}},{"type":"null"}],"description":"Plans that can use Neo; null = every plan"},"creditsPerTurn":{"anyOf":[{"type":"integer","minimum":0,"maximum":100000},{"type":"null"}],"description":"Credits per message; null = the product model fixedCredits.assistant"},"brain":{"type":"object","properties":{"primary":{"type":"object","properties":{"provider":{"type":"string","const":"anthropic"},"model":{"type":"string","minLength":3,"maxLength":80},"effort":{"type":"string","enum":["low","medium","high","xhigh","max"]},"maxTokens":{"type":"integer","minimum":1024,"maximum":64000}},"required":["provider","model","effort","maxTokens"],"additionalProperties":false},"fallback":{"type":"object","properties":{"enabled":{"type":"boolean"},"provider":{"type":"string","const":"openrouter"},"model":{"type":"string","minLength":3,"maxLength":120},"maxTokens":{"type":"integer","minimum":512,"maximum":32000}},"required":["enabled","provider","model","maxTokens"],"additionalProperties":false},"maxSteps":{"type":"integer","minimum":1,"maximum":20,"description":"Tool rounds per message"}},"required":["primary","fallback","maxSteps"],"additionalProperties":false},"voice":{"type":"object","properties":{"productModelSlug":{"type":"string","minLength":1,"maxLength":40,"description":"Product model whose TTS route speaks voice replies (the cheap one)"}},"required":["productModelSlug"],"additionalProperties":false},"tools":{"type":"object","propertyNames":{"type":"string","enum":["get_account","list_plans","search_voices","recommend_voices","search_help","list_recent_work","estimate_cost","add_tashkeel","generate_speech","generate_music","open_studio","suggest_upgrade","contact_support"]},"additionalProperties":{"type":"object","properties":{"enabled":{"type":"boolean"},"plans":{"anyOf":[{"maxItems":50,"type":"array","items":{"type":"string","minLength":1,"maxLength":40}},{"type":"null"}],"description":"Plan slugs allowed; null = every plan"},"approval":{"type":"boolean","description":"Ask the person before running (always on for tools that spend credits)"}},"required":["enabled","plans","approval"],"additionalProperties":false},"required":["get_account","list_plans","search_voices","recommend_voices","search_help","list_recent_work","estimate_cost","add_tashkeel","generate_speech","generate_music","open_studio","suggest_upgrade","contact_support"]},"instructions":{"type":"object","properties":{"en":{"type":"string","maxLength":4000},"ar":{"type":"string","maxLength":4000}},"required":["en","ar"],"additionalProperties":false,"description":"Extra instructions appended to Neo’s system prompt"},"defaults":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Neo on/off for everyone"},"plans":{"anyOf":[{"maxItems":50,"type":"array","items":{"type":"string","minLength":1,"maxLength":40}},{"type":"null"}],"description":"Plans that can use Neo; null = every plan"},"creditsPerTurn":{"anyOf":[{"type":"integer","minimum":0,"maximum":100000},{"type":"null"}],"description":"Credits per message; null = the product model fixedCredits.assistant"},"brain":{"type":"object","properties":{"primary":{"type":"object","properties":{"provider":{"type":"string","const":"anthropic"},"model":{"type":"string","minLength":3,"maxLength":80},"effort":{"type":"string","enum":["low","medium","high","xhigh","max"]},"maxTokens":{"type":"integer","minimum":1024,"maximum":64000}},"required":["provider","model","effort","maxTokens"],"additionalProperties":false},"fallback":{"type":"object","properties":{"enabled":{"type":"boolean"},"provider":{"type":"string","const":"openrouter"},"model":{"type":"string","minLength":3,"maxLength":120},"maxTokens":{"type":"integer","minimum":512,"maximum":32000}},"required":["enabled","provider","model","maxTokens"],"additionalProperties":false},"maxSteps":{"type":"integer","minimum":1,"maximum":20,"description":"Tool rounds per message"}},"required":["primary","fallback","maxSteps"],"additionalProperties":false},"voice":{"type":"object","properties":{"productModelSlug":{"type":"string","minLength":1,"maxLength":40,"description":"Product model whose TTS route speaks voice replies (the cheap one)"}},"required":["productModelSlug"],"additionalProperties":false},"tools":{"type":"object","propertyNames":{"type":"string","enum":["get_account","list_plans","search_voices","recommend_voices","search_help","list_recent_work","estimate_cost","add_tashkeel","generate_speech","generate_music","open_studio","suggest_upgrade","contact_support"]},"additionalProperties":{"type":"object","properties":{"enabled":{"type":"boolean"},"plans":{"anyOf":[{"maxItems":50,"type":"array","items":{"type":"string","minLength":1,"maxLength":40}},{"type":"null"}],"description":"Plan slugs allowed; null = every plan"},"approval":{"type":"boolean","description":"Ask the person before running (always on for tools that spend credits)"}},"required":["enabled","plans","approval"],"additionalProperties":false},"required":["get_account","list_plans","search_voices","recommend_voices","search_help","list_recent_work","estimate_cost","add_tashkeel","generate_speech","generate_music","open_studio","suggest_upgrade","contact_support"]},"instructions":{"type":"object","properties":{"en":{"type":"string","maxLength":4000},"ar":{"type":"string","maxLength":4000}},"required":["en","ar"],"additionalProperties":false,"description":"Extra instructions appended to Neo’s system prompt"}},"required":["enabled","plans","creditsPerTurn","brain","voice","tools","instructions"],"additionalProperties":false},"updatedAt":{"type":["string","null"]}},"required":["enabled","plans","creditsPerTurn","brain","voice","tools","instructions","defaults","updatedAt"],"additionalProperties":false},"example":{"enabled":true,"plans":["example"],"creditsPerTurn":0,"brain":{"primary":{"provider":"anthropic","model":"example","effort":"low","maxTokens":1024},"fallback":{"enabled":true,"provider":"openrouter","model":"example","maxTokens":512},"maxSteps":1},"voice":{"productModelSlug":"example"},"tools":{},"instructions":{"en":"example","ar":"مثال"},"defaults":{"enabled":true,"plans":["example"],"creditsPerTurn":0,"brain":{"primary":{"provider":"anthropic","model":"example","effort":"low","maxTokens":1024},"fallback":{"enabled":true,"provider":"openrouter","model":"example","maxTokens":512},"maxSteps":1},"voice":{"productModelSlug":"example"},"tools":{},"instructions":{"en":"example","ar":"مثال"}},"updatedAt":"2026-09-19T12:00:00.000Z"}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/neo","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/neo","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/neo","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/neo","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/neo","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/neo","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/neo","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/neo","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/neo","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/neo","traceId":"request-id"}}}}}},"put":{"operationId":"adminUpdateNeo","tags":["Admin"],"summary":"Save Neo settings. Audit-logged","description":"Requires admin permission models.write. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"X-CSRF-Token","in":"header","required":false,"description":"Required for cookie-authenticated mutations; returned by sign-in/sign-up.","schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"enabled":{"type":"boolean","description":"Neo on/off for everyone"},"plans":{"anyOf":[{"maxItems":50,"type":"array","items":{"type":"string","minLength":1,"maxLength":40}},{"type":"null"}],"description":"Plans that can use Neo; null = every plan"},"creditsPerTurn":{"anyOf":[{"type":"integer","minimum":0,"maximum":100000},{"type":"null"}],"description":"Credits per message; null = the product model fixedCredits.assistant"},"brain":{"type":"object","properties":{"primary":{"type":"object","properties":{"provider":{"type":"string","const":"anthropic"},"model":{"type":"string","minLength":3,"maxLength":80},"effort":{"type":"string","enum":["low","medium","high","xhigh","max"]},"maxTokens":{"type":"integer","minimum":1024,"maximum":64000}},"required":["provider","model","effort","maxTokens"],"additionalProperties":false},"fallback":{"type":"object","properties":{"enabled":{"type":"boolean"},"provider":{"type":"string","const":"openrouter"},"model":{"type":"string","minLength":3,"maxLength":120},"maxTokens":{"type":"integer","minimum":512,"maximum":32000}},"required":["enabled","provider","model","maxTokens"],"additionalProperties":false},"maxSteps":{"type":"integer","minimum":1,"maximum":20,"description":"Tool rounds per message"}},"required":["primary","fallback","maxSteps"],"additionalProperties":false},"voice":{"type":"object","properties":{"productModelSlug":{"type":"string","minLength":1,"maxLength":40,"description":"Product model whose TTS route speaks voice replies (the cheap one)"}},"required":["productModelSlug"],"additionalProperties":false},"tools":{"type":"object","propertyNames":{"type":"string","enum":["get_account","list_plans","search_voices","recommend_voices","search_help","list_recent_work","estimate_cost","add_tashkeel","generate_speech","generate_music","open_studio","suggest_upgrade","contact_support"]},"additionalProperties":{"type":"object","properties":{"enabled":{"type":"boolean"},"plans":{"anyOf":[{"maxItems":50,"type":"array","items":{"type":"string","minLength":1,"maxLength":40}},{"type":"null"}],"description":"Plan slugs allowed; null = every plan"},"approval":{"type":"boolean","description":"Ask the person before running (always on for tools that spend credits)"}},"required":["enabled","plans","approval"],"additionalProperties":false},"required":["get_account","list_plans","search_voices","recommend_voices","search_help","list_recent_work","estimate_cost","add_tashkeel","generate_speech","generate_music","open_studio","suggest_upgrade","contact_support"]},"instructions":{"type":"object","properties":{"en":{"type":"string","maxLength":4000},"ar":{"type":"string","maxLength":4000}},"required":["en","ar"],"additionalProperties":false,"description":"Extra instructions appended to Neo’s system prompt"}},"required":["enabled","plans","creditsPerTurn","brain","voice","tools","instructions"],"additionalProperties":false},"example":{"enabled":true,"plans":["example"],"creditsPerTurn":0,"brain":{"primary":{"provider":"anthropic","model":"example","effort":"low","maxTokens":1024},"fallback":{"enabled":true,"provider":"openrouter","model":"example","maxTokens":512},"maxSteps":1},"voice":{"productModelSlug":"example"},"tools":{},"instructions":{"en":"example","ar":"مثال"}}}}},"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"enabled":{"type":"boolean","description":"Neo on/off for everyone"},"plans":{"anyOf":[{"maxItems":50,"type":"array","items":{"type":"string","minLength":1,"maxLength":40}},{"type":"null"}],"description":"Plans that can use Neo; null = every plan"},"creditsPerTurn":{"anyOf":[{"type":"integer","minimum":0,"maximum":100000},{"type":"null"}],"description":"Credits per message; null = the product model fixedCredits.assistant"},"brain":{"type":"object","properties":{"primary":{"type":"object","properties":{"provider":{"type":"string","const":"anthropic"},"model":{"type":"string","minLength":3,"maxLength":80},"effort":{"type":"string","enum":["low","medium","high","xhigh","max"]},"maxTokens":{"type":"integer","minimum":1024,"maximum":64000}},"required":["provider","model","effort","maxTokens"],"additionalProperties":false},"fallback":{"type":"object","properties":{"enabled":{"type":"boolean"},"provider":{"type":"string","const":"openrouter"},"model":{"type":"string","minLength":3,"maxLength":120},"maxTokens":{"type":"integer","minimum":512,"maximum":32000}},"required":["enabled","provider","model","maxTokens"],"additionalProperties":false},"maxSteps":{"type":"integer","minimum":1,"maximum":20,"description":"Tool rounds per message"}},"required":["primary","fallback","maxSteps"],"additionalProperties":false},"voice":{"type":"object","properties":{"productModelSlug":{"type":"string","minLength":1,"maxLength":40,"description":"Product model whose TTS route speaks voice replies (the cheap one)"}},"required":["productModelSlug"],"additionalProperties":false},"tools":{"type":"object","propertyNames":{"type":"string","enum":["get_account","list_plans","search_voices","recommend_voices","search_help","list_recent_work","estimate_cost","add_tashkeel","generate_speech","generate_music","open_studio","suggest_upgrade","contact_support"]},"additionalProperties":{"type":"object","properties":{"enabled":{"type":"boolean"},"plans":{"anyOf":[{"maxItems":50,"type":"array","items":{"type":"string","minLength":1,"maxLength":40}},{"type":"null"}],"description":"Plan slugs allowed; null = every plan"},"approval":{"type":"boolean","description":"Ask the person before running (always on for tools that spend credits)"}},"required":["enabled","plans","approval"],"additionalProperties":false},"required":["get_account","list_plans","search_voices","recommend_voices","search_help","list_recent_work","estimate_cost","add_tashkeel","generate_speech","generate_music","open_studio","suggest_upgrade","contact_support"]},"instructions":{"type":"object","properties":{"en":{"type":"string","maxLength":4000},"ar":{"type":"string","maxLength":4000}},"required":["en","ar"],"additionalProperties":false,"description":"Extra instructions appended to Neo’s system prompt"},"defaults":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Neo on/off for everyone"},"plans":{"anyOf":[{"maxItems":50,"type":"array","items":{"type":"string","minLength":1,"maxLength":40}},{"type":"null"}],"description":"Plans that can use Neo; null = every plan"},"creditsPerTurn":{"anyOf":[{"type":"integer","minimum":0,"maximum":100000},{"type":"null"}],"description":"Credits per message; null = the product model fixedCredits.assistant"},"brain":{"type":"object","properties":{"primary":{"type":"object","properties":{"provider":{"type":"string","const":"anthropic"},"model":{"type":"string","minLength":3,"maxLength":80},"effort":{"type":"string","enum":["low","medium","high","xhigh","max"]},"maxTokens":{"type":"integer","minimum":1024,"maximum":64000}},"required":["provider","model","effort","maxTokens"],"additionalProperties":false},"fallback":{"type":"object","properties":{"enabled":{"type":"boolean"},"provider":{"type":"string","const":"openrouter"},"model":{"type":"string","minLength":3,"maxLength":120},"maxTokens":{"type":"integer","minimum":512,"maximum":32000}},"required":["enabled","provider","model","maxTokens"],"additionalProperties":false},"maxSteps":{"type":"integer","minimum":1,"maximum":20,"description":"Tool rounds per message"}},"required":["primary","fallback","maxSteps"],"additionalProperties":false},"voice":{"type":"object","properties":{"productModelSlug":{"type":"string","minLength":1,"maxLength":40,"description":"Product model whose TTS route speaks voice replies (the cheap one)"}},"required":["productModelSlug"],"additionalProperties":false},"tools":{"type":"object","propertyNames":{"type":"string","enum":["get_account","list_plans","search_voices","recommend_voices","search_help","list_recent_work","estimate_cost","add_tashkeel","generate_speech","generate_music","open_studio","suggest_upgrade","contact_support"]},"additionalProperties":{"type":"object","properties":{"enabled":{"type":"boolean"},"plans":{"anyOf":[{"maxItems":50,"type":"array","items":{"type":"string","minLength":1,"maxLength":40}},{"type":"null"}],"description":"Plan slugs allowed; null = every plan"},"approval":{"type":"boolean","description":"Ask the person before running (always on for tools that spend credits)"}},"required":["enabled","plans","approval"],"additionalProperties":false},"required":["get_account","list_plans","search_voices","recommend_voices","search_help","list_recent_work","estimate_cost","add_tashkeel","generate_speech","generate_music","open_studio","suggest_upgrade","contact_support"]},"instructions":{"type":"object","properties":{"en":{"type":"string","maxLength":4000},"ar":{"type":"string","maxLength":4000}},"required":["en","ar"],"additionalProperties":false,"description":"Extra instructions appended to Neo’s system prompt"}},"required":["enabled","plans","creditsPerTurn","brain","voice","tools","instructions"],"additionalProperties":false},"updatedAt":{"type":["string","null"]}},"required":["enabled","plans","creditsPerTurn","brain","voice","tools","instructions","defaults","updatedAt"],"additionalProperties":false},"example":{"enabled":true,"plans":["example"],"creditsPerTurn":0,"brain":{"primary":{"provider":"anthropic","model":"example","effort":"low","maxTokens":1024},"fallback":{"enabled":true,"provider":"openrouter","model":"example","maxTokens":512},"maxSteps":1},"voice":{"productModelSlug":"example"},"tools":{},"instructions":{"en":"example","ar":"مثال"},"defaults":{"enabled":true,"plans":["example"],"creditsPerTurn":0,"brain":{"primary":{"provider":"anthropic","model":"example","effort":"low","maxTokens":1024},"fallback":{"enabled":true,"provider":"openrouter","model":"example","maxTokens":512},"maxSteps":1},"voice":{"productModelSlug":"example"},"tools":{},"instructions":{"en":"example","ar":"مثال"}},"updatedAt":"2026-09-19T12:00:00.000Z"}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/neo","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/neo","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/neo","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/neo","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/neo","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/neo","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/neo","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/neo","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/neo","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/neo","traceId":"request-id"}}}}}}},"/v1/admin/neo/status":{"get":{"operationId":"adminNeoStatus","tags":["Admin"],"summary":"Which brains are configured (keys present), voice-reply route, 30-day usage","description":"Requires admin permission models.read. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false}],"security":[{"session":[]},{"apiKey":[]}],"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"anthropic":{"type":"object","properties":{"configured":{"type":"boolean","description":"ANTHROPIC_API_KEY or ANTHROPIC_AUTH_TOKEN is set"},"auth":{"type":"string","enum":["api-key","auth-token","none"]}},"required":["configured","auth"]},"openrouter":{"type":"object","properties":{"configured":{"type":"boolean"}},"required":["configured"]},"tts":{"type":"object","properties":{"available":{"type":"boolean","description":"The voice-reply product model has a TTS route"}},"required":["available"]},"usage30d":{"type":"object","properties":{"turns":{"type":"number"},"fallbackTurns":{"type":"number"},"failedTurns":{"type":"number"},"toolCalls":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"number"}}},"required":["turns","fallbackTurns","failedTurns","toolCalls"]}},"required":["anthropic","openrouter","tts","usage30d"]},"example":{"anthropic":{"configured":true,"auth":"api-key"},"openrouter":{"configured":true},"tts":{"available":true},"usage30d":{"turns":1,"fallbackTurns":1,"failedTurns":1,"toolCalls":{}}}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/neo/status","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/neo/status","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/neo/status","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/neo/status","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/neo/status","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/neo/status","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/neo/status","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/neo/status","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/neo/status","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/neo/status","traceId":"request-id"}}}}}}},"/v1/admin/neo/test":{"post":{"operationId":"adminTestNeo","tags":["Admin"],"summary":"Send one message to the configured brain (no tools, no credits) and report which provider answered","description":"Requires admin permission models.write. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"X-CSRF-Token","in":"header","required":false,"description":"Required for cookie-authenticated mutations; returned by sign-in/sign-up.","schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"message":{"type":"string","minLength":1,"maxLength":2000},"provider":{"default":"auto","type":"string","enum":["auto","anthropic","openrouter"]}},"required":["message"]},"example":{"message":"example","provider":"auto"}}}},"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"ok":{"type":"boolean"},"provider":{"anyOf":[{"type":"string","enum":["anthropic","openrouter"]},{"type":"null"}]},"model":{"type":["string","null"]},"text":{"type":"string"},"latencyMs":{"type":"number"},"error":{"type":["string","null"]},"fallbackReason":{"type":["string","null"]},"tools":{"default":[],"description":"Read-only tools the agent ran","type":"array","items":{"type":"object","properties":{"tool":{"type":"string"},"ok":{"type":"boolean"}},"required":["tool","ok"]}},"cards":{"default":[],"description":"Kinds of cards it produced","type":"array","items":{"type":"string"}}},"required":["ok","provider","model","text","latencyMs","error","fallbackReason"]},"example":{"ok":true,"provider":"anthropic","model":"example","text":"مرحباً بك في فوكلا.","latencyMs":1,"error":"example","fallbackReason":"example","tools":[],"cards":[]}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/neo/test","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/neo/test","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/neo/test","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/neo/test","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/neo/test","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/neo/test","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/neo/test","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/neo/test","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/neo/test","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/neo/test","traceId":"request-id"}}}}}}},"/v1/admin/neo/conversations":{"get":{"operationId":"adminListNeoConversations","tags":["Admin"],"summary":"Every Neo conversation across users, latest activity first: turns, credits, tools, approvals, brains and the first message","description":"Requires admin permission models.read. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"cursor","in":"query","required":false,"schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"schema":{"default":25,"type":"integer","minimum":1,"maximum":100}},{"name":"q","in":"query","required":false,"schema":{"description":"User email or name, session id, or text anywhere in the conversation","type":"string","maxLength":200}},{"name":"userId","in":"query","required":false,"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)$"}},{"name":"provider","in":"query","required":false,"schema":{"description":"A message of the conversation was answered by this brain","type":"string","enum":["anthropic","openrouter"]}},{"name":"status","in":"query","required":false,"schema":{"description":"failed: has failed turns; pending: approvals are waiting","type":"string","enum":["failed","pending"]}},{"name":"tool","in":"query","required":false,"schema":{"description":"A turn used this tool","type":"string","maxLength":60}},{"name":"from","in":"query","required":false,"schema":{"description":"Last activity on or after this day (UTC)","type":"string","format":"date","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])))$"}},{"name":"to","in":"query","required":false,"schema":{"description":"Last activity on or before this day (UTC)","type":"string","format":"date","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])))$"}}],"security":[{"session":[]},{"apiKey":[]}],"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"items":{"type":"array","items":{"type":"object","properties":{"sessionId":{"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)$"},"user":{"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)$"},"email":{"type":"string"},"name":{"type":"string"}},"required":["id","email","name"]},"workspace":{"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)$"},"name":{"type":"string"},"planSlug":{"type":["string","null"]}},"required":["id","name","planSlug"]},"country":{"type":["string","null"]},"startedAt":{"type":"string"},"lastActivityAt":{"type":"string"},"turns":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"failedTurns":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"creditsCharged":{"type":"number"},"firstMessage":{"description":"First thing the person said (typed or transcribed), cut at 160 characters","type":["string","null"]},"lastReply":{"description":"Latest reply text, cut at 160 characters","type":["string","null"]},"tools":{"type":"array","items":{"type":"object","properties":{"tool":{"type":"string"},"count":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}},"required":["tool","count"]}},"approvals":{"type":"object","properties":{"approved":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"declined":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"pending":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}},"required":["approved","declined","pending"]},"generations":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Generations Neo created (generation cards)"},"brains":{"type":"array","items":{"type":"object","properties":{"provider":{"type":"string","enum":["anthropic","openrouter"]},"model":{"type":"string"}},"required":["provider","model"]}},"mode":{"type":"string","enum":["text","audio"]},"voiceReplies":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}},"required":["sessionId","user","workspace","country","startedAt","lastActivityAt","turns","failedTurns","creditsCharged","firstMessage","lastReply","tools","approvals","generations","brains","mode","voiceReplies"]}},"nextCursor":{"type":["string","null"]}},"required":["items","nextCursor"]},"example":{"items":[{"sessionId":"01990000-0000-7000-8000-000000000001","user":{"id":"01990000-0000-7000-8000-000000000001","email":"example","name":"Noura"},"workspace":{"id":"01990000-0000-7000-8000-000000000001","name":"Noura","planSlug":"example"},"country":"example","startedAt":"2026-09-19T12:00:00.000Z","lastActivityAt":"2026-09-19T12:00:00.000Z","turns":-9007199254740991,"failedTurns":-9007199254740991,"creditsCharged":1,"firstMessage":"example","lastReply":"example","tools":[{"tool":"example","count":-9007199254740991}],"approvals":{"approved":-9007199254740991,"declined":-9007199254740991,"pending":-9007199254740991},"generations":-9007199254740991,"brains":[{"provider":"anthropic","model":"example"}],"mode":"text","voiceReplies":-9007199254740991}],"nextCursor":"example"}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/neo/conversations","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/neo/conversations","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/neo/conversations","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/neo/conversations","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/neo/conversations","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/neo/conversations","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/neo/conversations","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/neo/conversations","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/neo/conversations","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/neo/conversations","traceId":"request-id"}}}}}}},"/v1/admin/neo/conversations/{id}":{"get":{"operationId":"adminGetNeoConversation","tags":["Admin"],"summary":"One Neo conversation: every turn (text, cards, tools, approvals, brain, signed voice reply) and the raw transcript (thinking omitted); audit-logged","description":"Requires admin permission models.read. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"sessionId":{"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)$"},"user":{"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)$"},"email":{"type":"string"},"name":{"type":"string"}},"required":["id","email","name"]},"workspace":{"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)$"},"name":{"type":"string"},"planSlug":{"type":["string","null"]}},"required":["id","name","planSlug"]},"country":{"type":["string","null"]},"startedAt":{"type":"string"},"lastActivityAt":{"type":"string"},"turns":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"failedTurns":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"creditsCharged":{"type":"number"},"firstMessage":{"description":"First thing the person said (typed or transcribed), cut at 160 characters","type":["string","null"]},"lastReply":{"description":"Latest reply text, cut at 160 characters","type":["string","null"]},"tools":{"type":"array","items":{"type":"object","properties":{"tool":{"type":"string"},"count":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}},"required":["tool","count"]}},"approvals":{"type":"object","properties":{"approved":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"declined":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"pending":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}},"required":["approved","declined","pending"]},"generations":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Generations Neo created (generation cards)"},"brains":{"type":"array","items":{"type":"object","properties":{"provider":{"type":"string","enum":["anthropic","openrouter"]},"model":{"type":"string"}},"required":["provider","model"]}},"mode":{"type":"string","enum":["text","audio"]},"voiceReplies":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"data":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{},"description":"Session data (mode, locale, voice, frozen tools, prompt version, pending approvals)"},"turnsDetail":{"type":"array","items":{"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)$"},"createdAt":{"type":"string"},"status":{"type":"string"},"errorCode":{"type":["string","null"]},"creditsReserved":{"type":"number"},"creditsCharged":{"type":"number"},"kind":{"type":"string","enum":["message","approval"]},"userText":{"description":"Typed message","type":["string","null"]},"transcript":{"description":"What the person said (voice transcript or typed text)","type":["string","null"]},"voiceMessage":{"type":"boolean"},"answer":{"anyOf":[{"type":"object","properties":{"toolUseId":{"type":"string"},"approve":{"type":"boolean"},"tool":{"type":["string","null"]}},"required":["toolUseId","approve","tool"]},{"type":"null"}],"description":"Approval turns: the decision"},"reply":{"type":["string","null"]},"mode":{"type":"string","enum":["text","audio"]},"cards":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"kind":{"type":"string","const":"voices"},"title":{"type":["string","null"]},"voices":{"maxItems":12,"type":"array","items":{"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)$"},"name":{"type":"string"},"description":{"type":["string","null"]},"language":{"type":["string","null"]},"dialect":{"type":["string","null"]},"gender":{"type":["string","null"]},"age":{"type":["string","null"]},"tags":{"type":"array","items":{"type":"string"}},"premium":{"type":"boolean"},"locked":{"type":"boolean","description":"Premium voice the person’s plan cannot use"},"sampleUrl":{"type":["string","null"]},"reason":{"description":"Why Neo recommends it","type":["string","null"]}},"required":["id","name","description","language","dialect","gender","age","tags","premium","locked","sampleUrl","reason"]}}},"required":["kind","title","voices"]},{"type":"object","properties":{"kind":{"type":"string","const":"plans"},"currency":{"type":"string"},"current":{"type":["string","null"]},"plans":{"type":"array","items":{"type":"object","properties":{"slug":{"type":"string"},"name":{"type":"string"},"monthly":{"type":"number"},"annualPerMonth":{"type":["number","null"]},"credits":{"type":"number"},"highlights":{"type":"array","items":{"type":"string"}},"checkoutPath":{"type":["string","null"]}},"required":["slug","name","monthly","annualPerMonth","credits","highlights","checkoutPath"]}}},"required":["kind","currency","current","plans"]},{"type":"object","properties":{"kind":{"type":"string","const":"account"},"plan":{"type":"string"},"planName":{"type":"string"},"credits":{"type":"object","properties":{"available":{"type":"number"},"allowance":{"type":["number","null"]}},"required":["available","allowance"]},"watermark":{"type":"boolean"},"premiumVoices":{"type":"boolean"}},"required":["kind","plan","planName","credits","watermark","premiumVoices"]},{"type":"object","properties":{"kind":{"type":"string","const":"generation"},"generationId":{"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)$"},"type":{"type":"string","enum":["tts","music"]},"title":{"type":"string"},"credits":{"type":"number"},"path":{"type":"string","description":"App route of the result"}},"required":["kind","generationId","type","title","credits","path"]},{"type":"object","properties":{"kind":{"type":"string","const":"link"},"label":{"type":"string"},"path":{"type":"string","description":"App route, e.g. /tts?text=…&voice=…"}},"required":["kind","label","path"]},{"type":"object","properties":{"kind":{"type":"string","const":"upgrade"},"reason":{"type":"string"},"plan":{"description":"Suggested plan slug","type":["string","null"]}},"required":["kind","reason","plan"]},{"type":"object","properties":{"kind":{"type":"string","const":"help"},"articles":{"maxItems":5,"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"title":{"type":"string"},"path":{"type":["string","null"]}},"required":["id","title","path"]}}},"required":["kind","articles"]},{"type":"object","properties":{"kind":{"type":"string","const":"text"},"label":{"type":"string"},"text":{"type":"string","maxLength":20000,"description":"E.g. the vowelled script, with a copy button"}},"required":["kind","label","text"]},{"type":"object","properties":{"kind":{"type":"string","const":"ticket"},"ticketId":{"type":"string"},"subject":{"type":"string"}},"required":["kind","ticketId","subject"]}]}},"tools":{"type":"array","items":{"type":"object","properties":{"tool":{"type":"string"},"ok":{"type":"boolean"}},"required":["tool","ok"]}},"approvals":{"type":"array","items":{"type":"object","properties":{"toolUseId":{"type":"string"},"tool":{"type":"string","enum":["get_account","list_plans","search_voices","recommend_voices","search_help","list_recent_work","estimate_cost","add_tashkeel","generate_speech","generate_music","open_studio","suggest_upgrade","contact_support"]},"summary":{"type":"string","description":"Plain-language description of what will happen"},"credits":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"input":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}},"outcome":{"type":"string","enum":["approved","declined","pending","skipped"]}},"required":["toolUseId","tool","summary","credits","input","outcome"]}},"brain":{"anyOf":[{"type":"object","properties":{"provider":{"type":"string","enum":["anthropic","openrouter"]},"model":{"type":"string"}},"required":["provider","model"]},{"type":"null"}]},"fallbackReason":{"type":["string","null"]},"audio":{"anyOf":[{"type":"object","properties":{"url":{"type":"string"},"format":{"type":"string"},"expiresAt":{"type":"string"}},"required":["url","format","expiresAt"]},{"type":"null"}],"description":"Voice reply, signed for at most 15 minutes"}},"required":["id","createdAt","status","errorCode","creditsReserved","creditsCharged","kind","userText","transcript","voiceMessage","answer","reply","mode","cards","tools","approvals","brain","fallbackReason","audio"]}},"transcript":{"type":"array","items":{"type":"object","properties":{"seq":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"role":{"type":"string"},"provider":{"type":["string","null"]},"model":{"type":["string","null"]},"createdAt":{"type":"string"},"blocks":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","const":"text"},"text":{"type":"string"}},"required":["type","text"]},{"type":"object","properties":{"type":{"type":"string","const":"tool_use"},"id":{"type":"string"},"name":{"type":"string"},"input":{}},"required":["type","id","name","input"]},{"type":"object","properties":{"type":{"type":"string","const":"tool_result"},"toolUseId":{"type":"string"},"isError":{"type":"boolean"},"summary":{"type":"string","description":"Result text, cut at 600 characters"}},"required":["type","toolUseId","isError","summary"]},{"type":"object","properties":{"type":{"type":"string","const":"thinking"}},"required":["type"],"description":"Shown as [thinking]; the content is never returned"},{"type":"object","properties":{"type":{"type":"string","const":"other"},"kind":{"type":"string"}},"required":["type","kind"]}]}}},"required":["seq","role","provider","model","createdAt","blocks"]}}},"required":["sessionId","user","workspace","country","startedAt","lastActivityAt","turns","failedTurns","creditsCharged","firstMessage","lastReply","tools","approvals","generations","brains","mode","voiceReplies","data","turnsDetail","transcript"]},"example":{"sessionId":"01990000-0000-7000-8000-000000000001","user":{"id":"01990000-0000-7000-8000-000000000001","email":"example","name":"Noura"},"workspace":{"id":"01990000-0000-7000-8000-000000000001","name":"Noura","planSlug":"example"},"country":"example","startedAt":"2026-09-19T12:00:00.000Z","lastActivityAt":"2026-09-19T12:00:00.000Z","turns":-9007199254740991,"failedTurns":-9007199254740991,"creditsCharged":1,"firstMessage":"example","lastReply":"example","tools":[{"tool":"example","count":-9007199254740991}],"approvals":{"approved":-9007199254740991,"declined":-9007199254740991,"pending":-9007199254740991},"generations":-9007199254740991,"brains":[{"provider":"anthropic","model":"example"}],"mode":"text","voiceReplies":-9007199254740991,"data":{},"turnsDetail":[{"id":"01990000-0000-7000-8000-000000000001","createdAt":"2026-09-19T12:00:00.000Z","status":"example","errorCode":"example","creditsReserved":1,"creditsCharged":1,"kind":"message","userText":"example","transcript":"example","voiceMessage":true,"answer":{"toolUseId":"example","approve":true,"tool":"example"},"reply":"example","mode":"text","cards":["example"],"tools":[{"tool":"example","ok":true}],"approvals":[{"toolUseId":"example","tool":"get_account","summary":"example","credits":-9007199254740991,"input":{},"outcome":"approved"}],"brain":{"provider":"anthropic","model":"example"},"fallbackReason":"example","audio":{"url":"example","format":"example","expiresAt":"2026-09-19T12:00:00.000Z"}}],"transcript":[{"seq":-9007199254740991,"role":"example","provider":"example","model":"example","createdAt":"2026-09-19T12:00:00.000Z","blocks":["example"]}]}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/neo/conversations/{id}","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/neo/conversations/{id}","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/neo/conversations/{id}","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/neo/conversations/{id}","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/neo/conversations/{id}","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/neo/conversations/{id}","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/neo/conversations/{id}","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/neo/conversations/{id}","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/neo/conversations/{id}","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/neo/conversations/{id}","traceId":"request-id"}}}}}}},"/v1/admin/neo/stats":{"get":{"operationId":"adminNeoStats","tags":["Admin"],"summary":"Neo totals for the last 7, 30 or 90 days: conversations, messages, users, credits, fallback share, failure rate, top tools","description":"Requires admin permission models.read. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"days","in":"query","required":false,"schema":{"default":"7","type":"string","enum":["7","30","90"]}}],"security":[{"session":[]},{"apiKey":[]}],"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"days":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"conversations":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"messages":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"uniqueUsers":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"creditsCharged":{"type":"number"},"fallbackShare":{"type":"number","description":"Turns answered by OpenRouter ÷ turns with a brain"},"failureRate":{"type":"number","description":"failed ÷ (succeeded + failed)"},"topTools":{"type":"array","items":{"type":"object","properties":{"tool":{"type":"string"},"count":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}},"required":["tool","count"]}}},"required":["days","conversations","messages","uniqueUsers","creditsCharged","fallbackShare","failureRate","topTools"]},"example":{"days":-9007199254740991,"conversations":-9007199254740991,"messages":-9007199254740991,"uniqueUsers":-9007199254740991,"creditsCharged":1,"fallbackShare":1,"failureRate":1,"topTools":[{"tool":"example","count":-9007199254740991}]}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/neo/stats","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/neo/stats","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/neo/stats","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/neo/stats","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/neo/stats","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/neo/stats","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/neo/stats","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/neo/stats","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/neo/stats","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/neo/stats","traceId":"request-id"}}}}}}},"/v1/admin/neo/intent/stats":{"get":{"operationId":"adminNeoIntentStats","tags":["Admin"],"summary":"Neo intent check analytics: checks, share flagged, by intent, redirect / continue / abandon rates, conversion to the suggested tool, daily trend, timeouts, failures and latency","description":"Requires admin permission models.read. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"days","in":"query","required":false,"schema":{"default":"7","type":"string","enum":["1","7","30","90"]}},{"name":"source","in":"query","required":false,"schema":{"type":"string","enum":["tts","dashboard"]}}],"security":[{"session":[]},{"apiKey":[]}],"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"days":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"totals":{"type":"object","properties":{"checked":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"flagged":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"redirected":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"continued":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"abandoned":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"converted":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Redirected and then made a generation in the suggested tool within 24 hours"},"skipped":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"timeouts":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"failures":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"avgLatencyMs":{"type":["number","null"]},"p90LatencyMs":{"type":["number","null"]},"ttsGenerations":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"All TTS generations in the period, for scale"}},"required":["checked","flagged","redirected","continued","abandoned","converted","skipped","timeouts","failures","avgLatencyMs","p90LatencyMs","ttsGenerations"]},"byIntent":{"type":"array","items":{"type":"object","properties":{"intent":{"type":"string","enum":["tts","dialog","cartoon_video","birthday_video","video","image","music","voice_design","voice_clone","voice_change","dubbing","transcription","captions","video_edit"]},"count":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"redirected":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"converted":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}},"required":["intent","count","redirected","converted"]}},"daily":{"type":"array","items":{"type":"object","properties":{"day":{"type":"string"},"checked":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"flagged":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"redirected":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"continued":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"abandoned":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}},"required":["day","checked","flagged","redirected","continued","abandoned"]}},"config":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Neo checks TTS requests"},"threshold":{"type":"number","minimum":0.5,"maximum":0.99,"description":"Neo suggests another tool only from this confidence"},"timeoutMs":{"type":"integer","minimum":800,"maximum":6000,"description":"Longest Neo may take before the box generates anyway"},"dailyCap":{"type":"integer","minimum":0,"maximum":2000,"description":"Fresh (uncached) checks per user per UTC day"},"model":{"type":"string","enum":["neo","claude-opus-5-5","claude-sonnet-5-5","claude-haiku-4-5","claude-fable-5-1"],"description":"The Claude model that classifies (low effort); neo = the model of the Neo assistant"}},"required":["enabled","threshold","timeoutMs","dailyCap","model"],"additionalProperties":false}},"required":["days","totals","byIntent","daily","config"]},"example":{"days":-9007199254740991,"totals":{"checked":-9007199254740991,"flagged":-9007199254740991,"redirected":-9007199254740991,"continued":-9007199254740991,"abandoned":-9007199254740991,"converted":-9007199254740991,"skipped":-9007199254740991,"timeouts":-9007199254740991,"failures":-9007199254740991,"avgLatencyMs":"example","p90LatencyMs":"example","ttsGenerations":-9007199254740991},"byIntent":[{"intent":"tts","count":-9007199254740991,"redirected":-9007199254740991,"converted":-9007199254740991}],"daily":[{"day":"example","checked":-9007199254740991,"flagged":-9007199254740991,"redirected":-9007199254740991,"continued":-9007199254740991,"abandoned":-9007199254740991}],"config":{"enabled":true,"threshold":0.5,"timeoutMs":800,"dailyCap":0,"model":"neo"}}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/neo/intent/stats","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/neo/intent/stats","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/neo/intent/stats","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/neo/intent/stats","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/neo/intent/stats","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/neo/intent/stats","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/neo/intent/stats","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/neo/intent/stats","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/neo/intent/stats","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/neo/intent/stats","traceId":"request-id"}}}}}}},"/v1/admin/neo/intent/checks":{"get":{"operationId":"adminNeoIntentChecks","tags":["Admin"],"summary":"Every Neo intent check, newest first: the text, the decision of Neo, confidence and reason, what the person did and whether a redirect converted","description":"Requires admin permission models.read. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"intent","in":"query","required":false,"schema":{"type":"string","enum":["tts","dialog","cartoon_video","birthday_video","video","image","music","voice_design","voice_clone","voice_change","dubbing","transcription","captions","video_edit"]}},{"name":"outcome","in":"query","required":false,"schema":{"type":"string","enum":["redirected","continued","abandoned","skipped","proceeded"]}},{"name":"source","in":"query","required":false,"schema":{"type":"string","enum":["tts","dashboard"]}},{"name":"minConfidence","in":"query","required":false,"schema":{"type":"number","minimum":0,"maximum":1}},{"name":"maxConfidence","in":"query","required":false,"schema":{"type":"number","minimum":0,"maximum":1}},{"name":"from","in":"query","required":false,"schema":{"description":"ISO date (inclusive)","type":"string","maxLength":40}},{"name":"to","in":"query","required":false,"schema":{"description":"ISO date (inclusive)","type":"string","maxLength":40}},{"name":"misclassified","in":"query","required":false,"schema":{"description":"Only suggestions the person declined (Continue with voice)","type":"string","enum":["1"]}},{"name":"cursor","in":"query","required":false,"schema":{"type":"string","maxLength":200}},{"name":"limit","in":"query","required":false,"schema":{"default":50,"type":"integer","minimum":1,"maximum":100}}],"security":[{"session":[]},{"apiKey":[]}],"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"items":{"type":"array","items":{"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)$"},"createdAt":{"type":"string"},"user":{"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)$"},"email":{"type":["string","null"]},"name":{"type":["string","null"]}},"required":["id","email","name"]},"workspaceId":{"anyOf":[{"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)$"},{"type":"null"}]},"plan":{"type":["string","null"]},"source":{"type":"string","enum":["tts","dashboard"]},"text":{"type":"string","description":"The checked text (first 500 characters)"},"intent":{"type":"string","enum":["tts","dialog","cartoon_video","birthday_video","video","image","music","voice_design","voice_clone","voice_change","dubbing","transcription","captions","video_edit"]},"confidence":{"type":"number"},"reason":{"type":["string","null"]},"decision":{"type":"string","enum":["proceed","suggest"]},"skipped":{"anyOf":[{"type":"string","enum":["disabled","not-request","too-long","daily-cap","timeout","failed"]},{"type":"null"}]},"outcome":{"type":"string","enum":["redirected","continued","abandoned","skipped","proceeded"]},"actionAt":{"type":["string","null"]},"converted":{"description":"Redirected: a generation of the suggested tool within 24 hours (null when not redirected or not measurable)","type":["boolean","null"]},"latencyMs":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"cached":{"type":"boolean"},"model":{"type":["string","null"]}},"required":["id","createdAt","user","workspaceId","plan","source","text","intent","confidence","reason","decision","skipped","outcome","actionAt","converted","latencyMs","cached","model"]}},"nextCursor":{"type":["string","null"]}},"required":["items","nextCursor"]},"example":{"items":[{"id":"01990000-0000-7000-8000-000000000001","createdAt":"2026-09-19T12:00:00.000Z","user":{"id":"01990000-0000-7000-8000-000000000001","email":"example","name":"Noura"},"workspaceId":"01990000-0000-7000-8000-000000000001","plan":"example","source":"tts","text":"مرحباً بك في فوكلا.","intent":"tts","confidence":1,"reason":"example","decision":"proceed","skipped":"disabled","outcome":"redirected","actionAt":"2026-09-19T12:00:00.000Z","converted":"example","latencyMs":-9007199254740991,"cached":true,"model":"example"}],"nextCursor":"example"}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/neo/intent/checks","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/neo/intent/checks","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/neo/intent/checks","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/neo/intent/checks","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/neo/intent/checks","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/neo/intent/checks","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/neo/intent/checks","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/neo/intent/checks","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/neo/intent/checks","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/neo/intent/checks","traceId":"request-id"}}}}}}},"/v1/admin/neo/intent/settings":{"get":{"operationId":"adminGetNeoIntent","tags":["Admin"],"summary":"Neo intent check settings with defaults: on/off, confidence threshold, timeout, daily cap","description":"Requires admin permission models.read. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false}],"security":[{"session":[]},{"apiKey":[]}],"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"enabled":{"type":"boolean","description":"Neo checks TTS requests"},"threshold":{"type":"number","minimum":0.5,"maximum":0.99,"description":"Neo suggests another tool only from this confidence"},"timeoutMs":{"type":"integer","minimum":800,"maximum":6000,"description":"Longest Neo may take before the box generates anyway"},"dailyCap":{"type":"integer","minimum":0,"maximum":2000,"description":"Fresh (uncached) checks per user per UTC day"},"model":{"type":"string","enum":["neo","claude-opus-5-5","claude-sonnet-5-5","claude-haiku-4-5","claude-fable-5-1"],"description":"The Claude model that classifies (low effort); neo = the model of the Neo assistant"},"defaults":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Neo checks TTS requests"},"threshold":{"type":"number","minimum":0.5,"maximum":0.99,"description":"Neo suggests another tool only from this confidence"},"timeoutMs":{"type":"integer","minimum":800,"maximum":6000,"description":"Longest Neo may take before the box generates anyway"},"dailyCap":{"type":"integer","minimum":0,"maximum":2000,"description":"Fresh (uncached) checks per user per UTC day"},"model":{"type":"string","enum":["neo","claude-opus-5-5","claude-sonnet-5-5","claude-haiku-4-5","claude-fable-5-1"],"description":"The Claude model that classifies (low effort); neo = the model of the Neo assistant"}},"required":["enabled","threshold","timeoutMs","dailyCap","model"],"additionalProperties":false},"updatedAt":{"type":["string","null"]}},"required":["enabled","threshold","timeoutMs","dailyCap","model","defaults","updatedAt"],"additionalProperties":false},"example":{"enabled":true,"threshold":0.5,"timeoutMs":800,"dailyCap":0,"model":"neo","defaults":{"enabled":true,"threshold":0.5,"timeoutMs":800,"dailyCap":0,"model":"neo"},"updatedAt":"2026-09-19T12:00:00.000Z"}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/neo/intent/settings","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/neo/intent/settings","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/neo/intent/settings","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/neo/intent/settings","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/neo/intent/settings","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/neo/intent/settings","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/neo/intent/settings","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/neo/intent/settings","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/neo/intent/settings","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/neo/intent/settings","traceId":"request-id"}}}}}},"put":{"operationId":"adminUpdateNeoIntent","tags":["Admin"],"summary":"Save the Neo intent check settings. Audit-logged","description":"Requires admin permission models.write. Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"X-Workspace-Id","in":"header","schema":{"type":"string","format":"uuid"},"required":false},{"name":"X-CSRF-Token","in":"header","required":false,"description":"Required for cookie-authenticated mutations; returned by sign-in/sign-up.","schema":{"type":"string"}}],"security":[{"session":[]},{"apiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"enabled":{"type":"boolean","description":"Neo checks TTS requests"},"threshold":{"type":"number","minimum":0.5,"maximum":0.99,"description":"Neo suggests another tool only from this confidence"},"timeoutMs":{"type":"integer","minimum":800,"maximum":6000,"description":"Longest Neo may take before the box generates anyway"},"dailyCap":{"type":"integer","minimum":0,"maximum":2000,"description":"Fresh (uncached) checks per user per UTC day"},"model":{"type":"string","enum":["neo","claude-opus-5-5","claude-sonnet-5-5","claude-haiku-4-5","claude-fable-5-1"],"description":"The Claude model that classifies (low effort); neo = the model of the Neo assistant"}},"required":["enabled","threshold","timeoutMs","dailyCap","model"],"additionalProperties":false},"example":{"enabled":true,"threshold":0.5,"timeoutMs":800,"dailyCap":0,"model":"neo"}}}},"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"enabled":{"type":"boolean","description":"Neo checks TTS requests"},"threshold":{"type":"number","minimum":0.5,"maximum":0.99,"description":"Neo suggests another tool only from this confidence"},"timeoutMs":{"type":"integer","minimum":800,"maximum":6000,"description":"Longest Neo may take before the box generates anyway"},"dailyCap":{"type":"integer","minimum":0,"maximum":2000,"description":"Fresh (uncached) checks per user per UTC day"},"model":{"type":"string","enum":["neo","claude-opus-5-5","claude-sonnet-5-5","claude-haiku-4-5","claude-fable-5-1"],"description":"The Claude model that classifies (low effort); neo = the model of the Neo assistant"},"defaults":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Neo checks TTS requests"},"threshold":{"type":"number","minimum":0.5,"maximum":0.99,"description":"Neo suggests another tool only from this confidence"},"timeoutMs":{"type":"integer","minimum":800,"maximum":6000,"description":"Longest Neo may take before the box generates anyway"},"dailyCap":{"type":"integer","minimum":0,"maximum":2000,"description":"Fresh (uncached) checks per user per UTC day"},"model":{"type":"string","enum":["neo","claude-opus-5-5","claude-sonnet-5-5","claude-haiku-4-5","claude-fable-5-1"],"description":"The Claude model that classifies (low effort); neo = the model of the Neo assistant"}},"required":["enabled","threshold","timeoutMs","dailyCap","model"],"additionalProperties":false},"updatedAt":{"type":["string","null"]}},"required":["enabled","threshold","timeoutMs","dailyCap","model","defaults","updatedAt"],"additionalProperties":false},"example":{"enabled":true,"threshold":0.5,"timeoutMs":800,"dailyCap":0,"model":"neo","defaults":{"enabled":true,"threshold":0.5,"timeoutMs":800,"dailyCap":0,"model":"neo"},"updatedAt":"2026-09-19T12:00:00.000Z"}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/neo/intent/settings","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/neo/intent/settings","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/neo/intent/settings","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / WORKSPACE_FROZEN","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/neo/intent/settings","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/neo/intent/settings","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/neo/intent/settings","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/neo/intent/settings","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/neo/intent/settings","traceId":"request-id"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/neo/intent/settings","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/admin/neo/intent/settings","traceId":"request-id"}}}}}}},"/v1/public/geo":{"get":{"operationId":"publicGeo","tags":["Landing"],"summary":"The visitor country (Cloudflare, else an offline IP lookup, else the time zone hint; never the IP address) and the interface languages offered there: Persian only in Iran, Chinese only in China. Not cached (private, no-store)","description":"Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"timeZone","in":"query","required":false,"schema":{"description":"Browser IANA time zone (e.g. Asia/Riyadh): a last-resort hint for the user country when neither Cloudflare nor the IP lookup knows it; not stored","type":"string","maxLength":64}}],"security":[],"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"country":{"anyOf":[{"type":"string","pattern":"^[A-Z]{2}$"},{"type":"null"}],"description":"ISO 3166-1 alpha-2, null when unknown"},"locales":{"minItems":3,"type":"array","items":{"type":"string","enum":["ar","en","fr","fa","zh"]},"description":"Interface languages offered in that country (ar, en, fr everywhere; fa in Iran; zh in China)"}},"required":["country","locales"]},"example":{"country":"example","locales":["ar"]}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/public/geo","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/public/geo","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/public/geo","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / CHALLENGE_FAILED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/public/geo","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/public/geo","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/public/geo","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/public/geo","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/public/geo","traceId":"request-id"}}},"headers":{"Retry-After":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the limiting window resets."}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/public/geo","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE / CHALLENGE_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/public/geo","traceId":"request-id"}}},"headers":{"Retry-After":{"schema":{"type":"integer","minimum":1},"description":"Suggested delay before retrying."}}}}}},"/v1/public/demo/voices":{"get":{"operationId":"publicDemoVoices","tags":["Landing"],"summary":"Curated public demo voices, or the own library voices of a dialect page; no account required","description":"Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"dialect","in":"query","required":false,"schema":{"description":"A dialect page: that dialect’s own library voices (no cloned voices), else the curated demo voices","type":"string","pattern":"^ar(-[A-Z]{2})?$"}}],"security":[],"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"items":{"minItems":1,"maxItems":6,"type":"array","items":{"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)$"},"name":{"type":"object","properties":{"ar":{"type":"string","minLength":1},"en":{"type":"string","minLength":1}},"required":["ar","en"]},"dialect":{"type":"string"},"gender":{"type":"string"},"language":{"type":"string"},"sampleText":{"type":"object","properties":{"ar":{"type":"string","minLength":1},"en":{"type":"string","minLength":1}},"required":["ar","en"]}},"required":["id","name","dialect","gender","language","sampleText"]}}},"required":["items"]},"example":{"items":[{"id":"01990000-0000-7000-8000-000000000001","name":{"ar":"مثال","en":"example"},"dialect":"ar-SA","gender":"example","language":"ar","sampleText":{"ar":"مثال","en":"example"}}]}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/public/demo/voices","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/public/demo/voices","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/public/demo/voices","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / CHALLENGE_FAILED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/public/demo/voices","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/public/demo/voices","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/public/demo/voices","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/public/demo/voices","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/public/demo/voices","traceId":"request-id"}}},"headers":{"Retry-After":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the limiting window resets."}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/public/demo/voices","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE / CHALLENGE_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/public/demo/voices","traceId":"request-id"}}},"headers":{"Retry-After":{"schema":{"type":"integer","minimum":1},"description":"Suggested delay before retrying."}}}}}},"/v1/public/landing/voices":{"get":{"operationId":"publicLandingVoices","tags":["Landing"],"summary":"The voices the landing home features: the demo list and one voice per dialect card, chosen in the back office","description":"Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."}],"security":[],"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"tryMe":{"type":"array","items":{"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)$"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"},"data":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}}},"required":["id","createdAt","updatedAt"],"additionalProperties":{}}},"dialects":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"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)$"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"},"data":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}}},"required":["id","createdAt","updatedAt"],"additionalProperties":{}}}},"required":["tryMe","dialects"]},"example":{"tryMe":[{"id":"01990000-0000-7000-8000-000000000001","createdAt":"2026-09-19T12:00:00.000Z","updatedAt":"2026-09-19T12:00:00.000Z","data":{}}],"dialects":{}}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/public/landing/voices","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/public/landing/voices","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/public/landing/voices","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / CHALLENGE_FAILED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/public/landing/voices","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/public/landing/voices","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/public/landing/voices","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/public/landing/voices","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/public/landing/voices","traceId":"request-id"}}},"headers":{"Retry-After":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the limiting window resets."}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/public/landing/voices","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE / CHALLENGE_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/public/landing/voices","traceId":"request-id"}}},"headers":{"Retry-After":{"schema":{"type":"integer","minimum":1},"description":"Suggested delay before retrying."}}}}}},"/v1/public/landing/videos":{"get":{"operationId":"publicLandingVideos","tags":["Landing"],"summary":"Landing showcase videos: every shown slot with absolute URLs (public bucket, or this API's redirect route); cached a minute","description":"Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."}],"security":[],"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"slots":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"object","properties":{"slot":{"type":"string"},"aspect":{"type":"string","enum":["9:16","16:9","1:1"]},"source":{"type":"string","enum":["default","project","upload"]},"title":{"type":"object","properties":{"ar":{"type":"string"},"en":{"type":"string"}}},"caption":{"type":"object","properties":{"ar":{"type":"string"},"en":{"type":"string"}}},"dialect":{"type":["string","null"]},"durationSeconds":{"type":["number","null"]},"poster":{"description":"Absolute URL","type":["string","null"]},"sources":{"type":"array","items":{"type":"object","properties":{"url":{"type":"string"},"type":{"type":"string","enum":["video/webm","video/mp4"]}},"required":["url","type"]},"description":"WebM first, then MP4; absolute URLs"},"stills":{"type":"array","items":{"type":"string"}},"before":{"type":["string","null"]},"tier":{"type":["string","null"]},"projectId":{"type":["string","null"]},"uploadDate":{"description":"ISO date (VideoObject.uploadDate)","type":["string","null"]},"defaultDialect":{"type":["string","null"]},"variants":{"type":"array","items":{"type":"object","properties":{"dialect":{"type":"string"},"label":{"type":"object","properties":{"ar":{"type":"string"},"en":{"type":"string"}}},"poster":{"type":["string","null"]},"sources":{"type":"array","items":{"type":"object","properties":{"url":{"type":"string"},"type":{"type":"string","enum":["video/webm","video/mp4"]}},"required":["url","type"]}},"durationSeconds":{"type":["number","null"]}},"required":["dialect","label","poster","sources","durationSeconds"]}}},"required":["slot","aspect","source","title","caption","dialect","durationSeconds","poster","sources","stills","before","tier","projectId","uploadDate","defaultDialect","variants"]},"description":"Only slots that are shown and have a playable source"},"pictures":{"description":"The picture of every shown slot that has one (absolute URLs), with or without a video: the reference photo of ve-how-output","type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"string"}},"updatedAt":{"type":["string","null"]}},"required":["slots","updatedAt"]},"example":{"slots":{},"pictures":{},"updatedAt":"2026-09-19T12:00:00.000Z"}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/public/landing/videos","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/public/landing/videos","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/public/landing/videos","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / CHALLENGE_FAILED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/public/landing/videos","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/public/landing/videos","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/public/landing/videos","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/public/landing/videos","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/public/landing/videos","traceId":"request-id"}}},"headers":{"Retry-After":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the limiting window resets."}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/public/landing/videos","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE / CHALLENGE_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/public/landing/videos","traceId":"request-id"}}},"headers":{"Retry-After":{"schema":{"type":"integer","minimum":1},"description":"Suggested delay before retrying."}}}}}},"/v1/public/landing/videos/{slot}/file":{"get":{"operationId":"publicLandingVideoFile","tags":["Landing"],"summary":"Redirect to a freshly signed URL of a landing video object (used when the public bucket has no public base URL); the redirect is cacheable for an hour and the target serves byte ranges","description":"Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"slot","in":"path","required":true,"schema":{"type":"string"}},{"name":"key","in":"query","required":true,"schema":{"type":"string","minLength":1,"maxLength":400,"pattern":"^landing\\/videos\\/[A-Za-z0-9._/-]+$"}}],"security":[],"responses":{"302":{"description":"Redirect to the originating app and locale; successful OAuth also sets the session cookie.","headers":{"Location":{"schema":{"type":"string","format":"uri"}},"Set-Cookie":{"schema":{"type":"string"}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/public/landing/videos/{slot}/file","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/public/landing/videos/{slot}/file","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/public/landing/videos/{slot}/file","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / CHALLENGE_FAILED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/public/landing/videos/{slot}/file","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/public/landing/videos/{slot}/file","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/public/landing/videos/{slot}/file","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/public/landing/videos/{slot}/file","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/public/landing/videos/{slot}/file","traceId":"request-id"}}},"headers":{"Retry-After":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the limiting window resets."}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/public/landing/videos/{slot}/file","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE / CHALLENGE_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/public/landing/videos/{slot}/file","traceId":"request-id"}}},"headers":{"Retry-After":{"schema":{"type":"integer","minimum":1},"description":"Suggested delay before retrying."}}}}}},"/v1/public/landing/audio/{set}/file":{"get":{"operationId":"publicLandingAudioFile","tags":["Landing"],"summary":"Redirect to a freshly signed URL of a landing audio sample, key landing/audio/{set}/… (used when the public bucket has no public base URL); the redirect is cacheable for an hour and the target serves byte ranges","description":"Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."},{"name":"set","in":"path","required":true,"schema":{"type":"string"}},{"name":"key","in":"query","required":true,"schema":{"type":"string","minLength":1,"maxLength":400,"pattern":"^landing\\/audio\\/[A-Za-z0-9._/-]+$"}}],"security":[],"responses":{"302":{"description":"Redirect to the originating app and locale; successful OAuth also sets the session cookie.","headers":{"Location":{"schema":{"type":"string","format":"uri"}},"Set-Cookie":{"schema":{"type":"string"}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/public/landing/audio/{set}/file","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/public/landing/audio/{set}/file","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/public/landing/audio/{set}/file","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / CHALLENGE_FAILED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/public/landing/audio/{set}/file","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/public/landing/audio/{set}/file","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/public/landing/audio/{set}/file","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/public/landing/audio/{set}/file","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/public/landing/audio/{set}/file","traceId":"request-id"}}},"headers":{"Retry-After":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the limiting window resets."}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/public/landing/audio/{set}/file","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE / CHALLENGE_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/public/landing/audio/{set}/file","traceId":"request-id"}}},"headers":{"Retry-After":{"schema":{"type":"integer","minimum":1},"description":"Suggested delay before retrying."}}}}}},"/v1/public/demo/tts":{"post":{"operationId":"publicDemoTts","tags":["Landing"],"summary":"Synchronous demo TTS: 200 graphemes, 5/hour and 20/day per IP, 24-hour cache, 10-second synthesis deadline","description":"Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."}],"security":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"voiceId":{"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)$"},"text":{"type":"string","minLength":1,"maxLength":4000,"description":"At most 200 Unicode graphemes; 4000 UTF-16 code units as a defensive input cap."},"locale":{"type":"string","enum":["ar","en","fr","fa","zh"],"description":"UI/error locale; the curated voice dialect determines speech pronunciation."},"dialect":{"description":"Arabic dialect to speak (dialect pages), e.g. ar-AE; every Arabic demo voice speaks it. Defaults to the voice dialect.","type":"string","pattern":"^ar(-[A-Z]{2})?$"},"turnstileToken":{"type":"string","maxLength":2048}},"required":["voiceId","text","locale"]},"example":{"voiceId":"01990000-0000-7000-8000-000000000001","text":"مرحباً بك في فوكلا.","locale":"ar","dialect":"ar-SA","turnstileToken":"example"}}}},"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"audioUrl":{"type":"string","format":"uri"},"durationMs":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"peaks":{"maxItems":128,"type":"array","items":{"type":"number","minimum":0,"maximum":1}}},"required":["audioUrl","durationMs","peaks"]},"example":{"audioUrl":"http://localhost:4000/example","durationMs":1,"peaks":[0]}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/public/demo/tts","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/public/demo/tts","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/public/demo/tts","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / CHALLENGE_FAILED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/public/demo/tts","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/public/demo/tts","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/public/demo/tts","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/public/demo/tts","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/public/demo/tts","traceId":"request-id"}}},"headers":{"Retry-After":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the limiting window resets."}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/public/demo/tts","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE / CHALLENGE_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/public/demo/tts","traceId":"request-id"}}},"headers":{"Retry-After":{"schema":{"type":"integer","minimum":1},"description":"Suggested delay before retrying."}}}}}},"/v1/public/contact":{"post":{"operationId":"publicContact","tags":["Landing"],"summary":"Submit a contact ticket and acknowledgement; 5/hour per IP; consent and empty honeypot required","description":"Errors use localized RFC 9457 problem details.","parameters":[{"name":"Accept-Language","in":"header","schema":{"type":"string"},"example":"ar-SA,ar;q=0.9,en;q=0.8","description":"Language preferences, including regional tags used for display currency."}],"security":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":100},"email":{"type":"string","maxLength":254,"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,}$"},"topic":{"type":"string","enum":["sales","support","partnership","press","privacy","other"]},"company":{"type":"string","maxLength":200},"teamSize":{"type":"string","maxLength":50},"message":{"type":"string","minLength":1,"maxLength":5000},"locale":{"type":"string","enum":["ar","en"]},"turnstileToken":{"type":"string","maxLength":2048},"consent":{"type":"boolean","const":true},"website":{"type":"string","maxLength":0}},"required":["name","email","topic","message","locale","consent"]},"example":{"name":"Noura","email":"noura@example.com","topic":"sales","message":"Please tell us about your team plans.","locale":"en","consent":true,"website":""}}}},"responses":{"202":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","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)$"}},"required":["id"]},"example":{"id":"01990000-0000-7000-8000-000000000001"}}}},"400":{"description":"VALIDATION_ERROR / IDEMPOTENCY_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":400,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/public/contact","traceId":"request-id"}}}},"401":{"description":"UNAUTHENTICATED / TOTP_REQUIRED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":401,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/public/contact","traceId":"request-id"}}}},"402":{"description":"INSUFFICIENT_CREDITS","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":402,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/public/contact","traceId":"request-id"}}}},"403":{"description":"FORBIDDEN / CSRF_INVALID / CHALLENGE_FAILED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":403,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/public/contact","traceId":"request-id"}}}},"404":{"description":"NOT_FOUND","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":404,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/public/contact","traceId":"request-id"}}}},"409":{"description":"CONFLICT / IDEMPOTENCY_CONFLICT","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":409,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/public/contact","traceId":"request-id"}}}},"422":{"description":"VALIDATION_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":422,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/public/contact","traceId":"request-id"}}}},"429":{"description":"RATE_LIMITED","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":429,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/public/contact","traceId":"request-id"}}},"headers":{"Retry-After":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the limiting window resets."}}},"500":{"description":"INTERNAL_ERROR","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":500,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/public/contact","traceId":"request-id"}}}},"503":{"description":"PROVIDER_UNAVAILABLE / CHALLENGE_UNAVAILABLE","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"instance":{"type":"string"},"traceId":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"description":"Machine-readable reason, e.g. role, member_cap, approval_required, seats","type":"string"},"maximum":{"description":"The plan limit that was hit, when there is one (e.g. voiceChangerMaxSeconds, transcriptMaxMinutes)","type":"number"}},"required":["path","message"]}}},"required":["type","title","status","detail","code","instance","traceId"]},"example":{"type":"https://api.vocla.ai/problems/validation_error","title":"VALIDATION_ERROR","status":503,"detail":"Check the request fields.","code":"VALIDATION_ERROR","instance":"/v1/public/contact","traceId":"request-id"}}},"headers":{"Retry-After":{"schema":{"type":"integer","minimum":1},"description":"Suggested delay before retrying."}}}}}}}}