{"openapi":"3.1.0","info":{"title":"Leony by Aweb API","version":"0.1.0","description":"Standalone Leony discovery, capability, monitoring, live-event, planning, render, publish, and guarded worker surface. Spend-bearing creative execution remains routed through Aweb V2 API and Aweb MCP governance."},"servers":[{"url":"https://aweb-leony.vercel.app"}],"components":{"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer","description":"Scoped Aweb API key in the form Bearer sk-aweb-..."},"apiKeyAuth":{"type":"apiKey","in":"header","name":"X-API-Key","description":"Aweb MCP/API key header where supported by the Aweb transport."},"leonySession":{"type":"apiKey","in":"cookie","name":"next-auth.session-token","description":"Leony Studio session cookie from the Google sign-in allowlist."}},"schemas":{"LeonyExploreInput":{"$id":"https://aweb-leony.vercel.app/schemas/leony-explore-input.json","type":"object","additionalProperties":false,"required":["mode"],"properties":{"mode":{"type":"string","enum":["providers","workflows","assets","jobs","plans","approvals","metrics","api"]},"query":{"type":"string","minLength":1,"maxLength":240},"capability":{"type":"string","minLength":1,"maxLength":160},"limit":{"type":"integer","minimum":1,"maximum":100,"default":12}}},"LeonyBriefInput":{"$id":"https://aweb-leony.vercel.app/schemas/leony-brief-input.json","type":"object","additionalProperties":false,"required":["mode","prompt"],"properties":{"mode":{"type":"string","enum":["video","avatar","persona","voice","campaign","publish"],"description":"Leony creative mode."},"prompt":{"type":"string","minLength":1,"maxLength":4000,"description":"Creative command or production brief."},"title":{"type":"string","minLength":1,"maxLength":140,"description":"Human-readable project title."},"targetFormats":{"type":"array","description":"Requested output formats such as 9:16 social or 16:9 hero.","minItems":1,"maxItems":12,"items":{"type":"string","minLength":1,"maxLength":120},"uniqueItems":true},"channels":{"type":"array","minItems":1,"maxItems":12,"uniqueItems":true,"items":{"type":"string","enum":["tiktok","instagram","youtube_shorts","linkedin","x_twitter","pinterest","shopify","gumroad","manual_export"],"description":"Target publish or export channel."}},"managedByAweb":{"type":"boolean","default":true}}},"LeonyPlanInput":{"$id":"https://aweb-leony.vercel.app/schemas/leony-plan-input.json","type":"object","additionalProperties":false,"anyOf":[{"required":["briefId"]},{"required":["prompt","mode"]}],"properties":{"briefId":{"type":"string","minLength":1,"maxLength":80,"description":"Existing Leony brief id."},"prompt":{"type":"string","minLength":1,"maxLength":4000,"description":"Creative command used when creating a plan without a prior brief."},"mode":{"type":"string","enum":["video","avatar","persona","voice","campaign","publish"],"description":"Leony creative mode."},"routePolicy":{"type":"string","enum":["quality_first","speed_first","cost_guarded","balanced"],"default":"balanced","description":"Provider routing preference used for plan generation."},"targetFormats":{"type":"array","description":"Requested output formats for this plan.","minItems":1,"maxItems":12,"items":{"type":"string","minLength":1,"maxLength":120},"uniqueItems":true},"budgetUsd":{"type":"number","minimum":0,"maximum":10000,"description":"Optional operator budget ceiling for the plan."}}},"LeonyRenderInput":{"$id":"https://aweb-leony.vercel.app/schemas/leony-render-input.json","type":"object","additionalProperties":false,"required":["planId","dryRun"],"properties":{"planId":{"type":"string","minLength":1,"maxLength":80,"description":"Leony render plan id."},"dryRun":{"type":"boolean","description":"When true, create the approval boundary without provider execution."},"approvalRef":{"type":"string","minLength":1,"maxLength":160,"description":"Approval reference required before live provider execution."},"maxCostUsd":{"type":"number","exclusiveMinimum":0,"maximum":10000,"description":"Hard cost ceiling for a governed render attempt."}}},"LeonyPublishInput":{"$id":"https://aweb-leony.vercel.app/schemas/leony-publish-input.json","type":"object","additionalProperties":false,"anyOf":[{"required":["assetId"]},{"required":["planId"]}],"required":["channels","dryRun"],"properties":{"assetId":{"type":"string","minLength":1,"maxLength":120,"description":"Leony or Aweb asset id to publish/export."},"planId":{"type":"string","minLength":1,"maxLength":80,"description":"Plan id to use as publish/export context."},"channels":{"type":"array","minItems":1,"maxItems":12,"uniqueItems":true,"items":{"type":"string","enum":["tiktok","instagram","youtube_shorts","linkedin","x_twitter","pinterest","shopify","gumroad","manual_export"],"description":"Target publish or export channel."}},"dryRun":{"type":"boolean","description":"When true, create only an approval/outbox package."},"approvalRef":{"type":"string","minLength":1,"maxLength":160,"description":"Approval reference required before external publishing."}}},"LeonyAnalyzeInput":{"$id":"https://aweb-leony.vercel.app/schemas/leony-analyze-input.json","type":"object","additionalProperties":false,"required":["scope"],"properties":{"scope":{"type":"string","enum":["providers","jobs","approvals","spend","publishing","assets"]},"window":{"type":"string","enum":["24h","7d","30d","90d"],"default":"7d"},"mode":{"type":"string","enum":["video","avatar","persona","voice","campaign","publish"],"description":"Leony creative mode."}}},"LeonyOperateInput":{"$id":"https://aweb-leony.vercel.app/schemas/leony-operate-input.json","type":"object","additionalProperties":false,"required":["action","targetType","targetId"],"properties":{"action":{"type":"string","enum":["inspect_lineage","cancel_job","rerun_plan","request_provider_setup","verify_governance"]},"targetType":{"type":"string","enum":["brief","plan","job","asset","provider"]},"targetId":{"type":"string","minLength":1,"maxLength":160,"description":"Target object id."},"params":{"type":"object","additionalProperties":true}}},"LeonyApiKeyCreateInput":{"$id":"https://aweb-leony.vercel.app/schemas/leony-api-key-create-input.json","type":"object","additionalProperties":false,"required":["name","scopes"],"properties":{"name":{"type":"string","minLength":1,"maxLength":100},"scopes":{"type":"array","minItems":1,"maxItems":8,"uniqueItems":true,"items":{"type":"string","enum":["leony.read","leony.brief","leony.plan","leony.render","leony.publish","leony.worker","aweb.mcp.read","aweb.mcp.execute"]}},"expiresAt":{"type":"string","format":"date-time"},"allowedIps":{"type":"array","maxItems":25,"uniqueItems":true,"items":{"type":"string","pattern":"^(\\d{1,3}\\.){3}\\d{1,3}(/32)?$"}}}},"LeonyApiKeyUpdateInput":{"$id":"https://aweb-leony.vercel.app/schemas/leony-api-key-update-input.json","type":"object","additionalProperties":false,"minProperties":1,"properties":{"name":{"type":"string","minLength":1,"maxLength":100},"scopes":{"type":"array","minItems":1,"maxItems":8,"uniqueItems":true,"items":{"type":"string","enum":["leony.read","leony.brief","leony.plan","leony.render","leony.publish","leony.worker","aweb.mcp.read","aweb.mcp.execute"]}},"allowedIps":{"type":"array","maxItems":25,"uniqueItems":true,"items":{"type":"string","pattern":"^(\\d{1,3}\\.){3}\\d{1,3}(/32)?$"}}}},"LeonyToolResult":{"$id":"https://aweb-leony.vercel.app/schemas/leony-tool-result.json","type":"object","additionalProperties":false,"required":["tool","status","warnings","resources","output"],"properties":{"tool":{"type":"string"},"status":{"type":"string","enum":["ok"]},"warnings":{"type":"array","items":{"type":"string"}},"resources":{"type":"array","items":{"type":"string"}},"output":{"type":"object","additionalProperties":true},"persistence":{"type":"object","additionalProperties":true,"description":"Optional persistence posture attached by the Leony route handler."}}},"LeonyProblem":{"$id":"https://aweb-leony.vercel.app/schemas/leony-problem.json","type":"object","additionalProperties":false,"required":["error"],"properties":{"error":{"type":"object","additionalProperties":false,"required":["type","message","code","request_id"],"properties":{"type":{"type":"string","enum":["authentication_error","authorization_error","validation_error","rate_limit_error","execution_error","service_unavailable"]},"message":{"type":"string"},"code":{"type":"string"},"docs":{"type":"string","format":"uri"},"request_id":{"type":"string"}}}}},"LeonyWorkerRunResult":{"$id":"https://aweb-leony.vercel.app/schemas/leony-worker-run-result.json","type":"object","additionalProperties":true,"required":["status","providerCallsEnabled","processed","items"],"properties":{"status":{"type":"string","enum":["ok","disabled","blocked"]},"providerCallsEnabled":{"type":"boolean"},"processed":{"type":"integer","minimum":0},"items":{"type":"array","items":{"type":"object","additionalProperties":true}}}},"LeonyApiKey":{"$id":"https://aweb-leony.vercel.app/schemas/leony-api-key.json","type":"object","additionalProperties":true,"required":["id","name","keyPrefix","scopes","createdAt"],"properties":{"id":{"type":"string","format":"uuid"},"name":{"type":"string"},"keyPrefix":{"type":"string"},"key":{"type":"string","description":"Full secret returned only by create-key responses."},"scopes":{"type":"array","items":{"type":"string","enum":["leony.read","leony.brief","leony.plan","leony.render","leony.publish","leony.worker","aweb.mcp.read","aweb.mcp.execute"]}},"usageCount":{"type":"integer","minimum":0},"rateLimitTier":{"type":"string"},"rateLimitPerMinute":{"type":"integer","minimum":1},"rateLimitPerDay":{"type":"integer","minimum":1},"allowedIps":{"type":["array","null"],"items":{"type":"string"}},"createdAt":{"type":"string","format":"date-time"},"expiresAt":{"type":["string","null"],"format":"date-time"},"revokedAt":{"type":["string","null"],"format":"date-time"}}},"LeonyApiKeyList":{"$id":"https://aweb-leony.vercel.app/schemas/leony-api-key-list.json","type":"object","additionalProperties":true,"required":["object","keys","count"],"properties":{"object":{"type":"string","enum":["list"]},"keys":{"type":"array","items":{"$ref":"#/components/schemas/LeonyApiKey"}},"count":{"type":"integer","minimum":0}}},"LeonyApiKeyUsage":{"$id":"https://aweb-leony.vercel.app/schemas/leony-api-key-usage.json","type":"object","additionalProperties":true,"required":["stats","capabilityBreakdown","logs"],"properties":{"stats":{"type":"object","additionalProperties":true},"capabilityBreakdown":{"type":"array","items":{"type":"object","additionalProperties":true}},"logs":{"type":"array","items":{"type":"object","additionalProperties":true}}}},"LeonyAccessCheck":{"$id":"https://aweb-leony.vercel.app/schemas/leony-access-check.json","type":"object","additionalProperties":true,"required":["status","principal","mcp","governance"],"properties":{"status":{"type":"string","enum":["ok"]},"principal":{"type":"object","additionalProperties":true},"mcp":{"type":"object","additionalProperties":true},"governance":{"type":"object","additionalProperties":true}}}}},"paths":{"/api/leony/v1":{"get":{"operationId":"get_api_leony_v1","summary":"Leony API/MCP discovery manifest for standalone product clients.","tags":["Leony"],"security":[],"responses":{"200":{"description":"Successful Leony response.","content":{"application/json":{"schema":{"$id":"https://aweb-leony.vercel.app/schemas/leony-tool-result.json","type":"object","additionalProperties":false,"required":["tool","status","warnings","resources","output"],"properties":{"tool":{"type":"string"},"status":{"type":"string","enum":["ok"]},"warnings":{"type":"array","items":{"type":"string"}},"resources":{"type":"array","items":{"type":"string"}},"output":{"type":"object","additionalProperties":true},"persistence":{"type":"object","additionalProperties":true,"description":"Optional persistence posture attached by the Leony route handler."}}},"examples":{"ok":{"summary":"Tool result envelope.","value":{"tool":"leony_plan","status":"ok","warnings":[],"output":{"plan":{"id":"00000000-0000-4000-8000-000000000000","estimatedCostUsd":12.5,"estimatedLatencyMs":45000},"budgetExceeded":false}}}}}}},"400":{"description":"Invalid request.","content":{"application/json":{"schema":{"$id":"https://aweb-leony.vercel.app/schemas/leony-problem.json","type":"object","additionalProperties":false,"required":["error"],"properties":{"error":{"type":"object","additionalProperties":false,"required":["type","message","code","request_id"],"properties":{"type":{"type":"string","enum":["authentication_error","authorization_error","validation_error","rate_limit_error","execution_error","service_unavailable"]},"message":{"type":"string"},"code":{"type":"string"},"docs":{"type":"string","format":"uri"},"request_id":{"type":"string"}}}}},"examples":{"problem":{"summary":"Invalid request.","value":{"error":{"type":"validation_error","message":"Invalid request.","code":"invalid_request","docs":"https://aweb-leony.vercel.app/docs#auth","request_id":"00000000-0000-4000-8000-000000000000"}}}}}}},"401":{"description":"Authentication required.","content":{"application/json":{"schema":{"$id":"https://aweb-leony.vercel.app/schemas/leony-problem.json","type":"object","additionalProperties":false,"required":["error"],"properties":{"error":{"type":"object","additionalProperties":false,"required":["type","message","code","request_id"],"properties":{"type":{"type":"string","enum":["authentication_error","authorization_error","validation_error","rate_limit_error","execution_error","service_unavailable"]},"message":{"type":"string"},"code":{"type":"string"},"docs":{"type":"string","format":"uri"},"request_id":{"type":"string"}}}}},"examples":{"problem":{"summary":"Authentication required.","value":{"error":{"type":"validation_error","message":"Authentication required.","code":"invalid_request","docs":"https://aweb-leony.vercel.app/docs#auth","request_id":"00000000-0000-4000-8000-000000000000"}}}}}}},"403":{"description":"Insufficient Leony scope.","content":{"application/json":{"schema":{"$id":"https://aweb-leony.vercel.app/schemas/leony-problem.json","type":"object","additionalProperties":false,"required":["error"],"properties":{"error":{"type":"object","additionalProperties":false,"required":["type","message","code","request_id"],"properties":{"type":{"type":"string","enum":["authentication_error","authorization_error","validation_error","rate_limit_error","execution_error","service_unavailable"]},"message":{"type":"string"},"code":{"type":"string"},"docs":{"type":"string","format":"uri"},"request_id":{"type":"string"}}}}},"examples":{"problem":{"summary":"Insufficient Leony scope.","value":{"error":{"type":"validation_error","message":"Insufficient Leony scope.","code":"invalid_request","docs":"https://aweb-leony.vercel.app/docs#auth","request_id":"00000000-0000-4000-8000-000000000000"}}}}}}},"429":{"description":"Rate limit exceeded.","content":{"application/json":{"schema":{"$id":"https://aweb-leony.vercel.app/schemas/leony-problem.json","type":"object","additionalProperties":false,"required":["error"],"properties":{"error":{"type":"object","additionalProperties":false,"required":["type","message","code","request_id"],"properties":{"type":{"type":"string","enum":["authentication_error","authorization_error","validation_error","rate_limit_error","execution_error","service_unavailable"]},"message":{"type":"string"},"code":{"type":"string"},"docs":{"type":"string","format":"uri"},"request_id":{"type":"string"}}}}},"examples":{"problem":{"summary":"Rate limit exceeded.","value":{"error":{"type":"rate_limit_error","message":"Rate limit exceeded.","code":"rate_limit_exceeded","docs":"https://aweb-leony.vercel.app/docs#auth","request_id":"00000000-0000-4000-8000-000000000000"}}}}}}},"500":{"description":"Execution failed.","content":{"application/json":{"schema":{"$id":"https://aweb-leony.vercel.app/schemas/leony-problem.json","type":"object","additionalProperties":false,"required":["error"],"properties":{"error":{"type":"object","additionalProperties":false,"required":["type","message","code","request_id"],"properties":{"type":{"type":"string","enum":["authentication_error","authorization_error","validation_error","rate_limit_error","execution_error","service_unavailable"]},"message":{"type":"string"},"code":{"type":"string"},"docs":{"type":"string","format":"uri"},"request_id":{"type":"string"}}}}},"examples":{"problem":{"summary":"Execution failed.","value":{"error":{"type":"validation_error","message":"Execution failed.","code":"invalid_request","docs":"https://aweb-leony.vercel.app/docs#auth","request_id":"00000000-0000-4000-8000-000000000000"}}}}}}}}}},"/api/leony/v1/capabilities":{"get":{"operationId":"get_api_leony_v1_capabilities","summary":"Leony creative capability and provider-domain discovery.","tags":["Leony"],"security":[],"responses":{"200":{"description":"Successful Leony response.","content":{"application/json":{"schema":{"$id":"https://aweb-leony.vercel.app/schemas/leony-tool-result.json","type":"object","additionalProperties":false,"required":["tool","status","warnings","resources","output"],"properties":{"tool":{"type":"string"},"status":{"type":"string","enum":["ok"]},"warnings":{"type":"array","items":{"type":"string"}},"resources":{"type":"array","items":{"type":"string"}},"output":{"type":"object","additionalProperties":true},"persistence":{"type":"object","additionalProperties":true,"description":"Optional persistence posture attached by the Leony route handler."}}},"examples":{"ok":{"summary":"Tool result envelope.","value":{"tool":"leony_plan","status":"ok","warnings":[],"output":{"plan":{"id":"00000000-0000-4000-8000-000000000000","estimatedCostUsd":12.5,"estimatedLatencyMs":45000},"budgetExceeded":false}}}}}}},"400":{"description":"Invalid request.","content":{"application/json":{"schema":{"$id":"https://aweb-leony.vercel.app/schemas/leony-problem.json","type":"object","additionalProperties":false,"required":["error"],"properties":{"error":{"type":"object","additionalProperties":false,"required":["type","message","code","request_id"],"properties":{"type":{"type":"string","enum":["authentication_error","authorization_error","validation_error","rate_limit_error","execution_error","service_unavailable"]},"message":{"type":"string"},"code":{"type":"string"},"docs":{"type":"string","format":"uri"},"request_id":{"type":"string"}}}}},"examples":{"problem":{"summary":"Invalid request.","value":{"error":{"type":"validation_error","message":"Invalid request.","code":"invalid_request","docs":"https://aweb-leony.vercel.app/docs#auth","request_id":"00000000-0000-4000-8000-000000000000"}}}}}}},"401":{"description":"Authentication required.","content":{"application/json":{"schema":{"$id":"https://aweb-leony.vercel.app/schemas/leony-problem.json","type":"object","additionalProperties":false,"required":["error"],"properties":{"error":{"type":"object","additionalProperties":false,"required":["type","message","code","request_id"],"properties":{"type":{"type":"string","enum":["authentication_error","authorization_error","validation_error","rate_limit_error","execution_error","service_unavailable"]},"message":{"type":"string"},"code":{"type":"string"},"docs":{"type":"string","format":"uri"},"request_id":{"type":"string"}}}}},"examples":{"problem":{"summary":"Authentication required.","value":{"error":{"type":"validation_error","message":"Authentication required.","code":"invalid_request","docs":"https://aweb-leony.vercel.app/docs#auth","request_id":"00000000-0000-4000-8000-000000000000"}}}}}}},"403":{"description":"Insufficient Leony scope.","content":{"application/json":{"schema":{"$id":"https://aweb-leony.vercel.app/schemas/leony-problem.json","type":"object","additionalProperties":false,"required":["error"],"properties":{"error":{"type":"object","additionalProperties":false,"required":["type","message","code","request_id"],"properties":{"type":{"type":"string","enum":["authentication_error","authorization_error","validation_error","rate_limit_error","execution_error","service_unavailable"]},"message":{"type":"string"},"code":{"type":"string"},"docs":{"type":"string","format":"uri"},"request_id":{"type":"string"}}}}},"examples":{"problem":{"summary":"Insufficient Leony scope.","value":{"error":{"type":"validation_error","message":"Insufficient Leony scope.","code":"invalid_request","docs":"https://aweb-leony.vercel.app/docs#auth","request_id":"00000000-0000-4000-8000-000000000000"}}}}}}},"429":{"description":"Rate limit exceeded.","content":{"application/json":{"schema":{"$id":"https://aweb-leony.vercel.app/schemas/leony-problem.json","type":"object","additionalProperties":false,"required":["error"],"properties":{"error":{"type":"object","additionalProperties":false,"required":["type","message","code","request_id"],"properties":{"type":{"type":"string","enum":["authentication_error","authorization_error","validation_error","rate_limit_error","execution_error","service_unavailable"]},"message":{"type":"string"},"code":{"type":"string"},"docs":{"type":"string","format":"uri"},"request_id":{"type":"string"}}}}},"examples":{"problem":{"summary":"Rate limit exceeded.","value":{"error":{"type":"rate_limit_error","message":"Rate limit exceeded.","code":"rate_limit_exceeded","docs":"https://aweb-leony.vercel.app/docs#auth","request_id":"00000000-0000-4000-8000-000000000000"}}}}}}},"500":{"description":"Execution failed.","content":{"application/json":{"schema":{"$id":"https://aweb-leony.vercel.app/schemas/leony-problem.json","type":"object","additionalProperties":false,"required":["error"],"properties":{"error":{"type":"object","additionalProperties":false,"required":["type","message","code","request_id"],"properties":{"type":{"type":"string","enum":["authentication_error","authorization_error","validation_error","rate_limit_error","execution_error","service_unavailable"]},"message":{"type":"string"},"code":{"type":"string"},"docs":{"type":"string","format":"uri"},"request_id":{"type":"string"}}}}},"examples":{"problem":{"summary":"Execution failed.","value":{"error":{"type":"validation_error","message":"Execution failed.","code":"invalid_request","docs":"https://aweb-leony.vercel.app/docs#auth","request_id":"00000000-0000-4000-8000-000000000000"}}}}}}}}}},"/api/leony/v1/monitoring":{"get":{"operationId":"get_api_leony_v1_monitoring","summary":"Leony control-plane monitoring: persistence posture, recent projects, jobs, approvals, and MCP tool calls.","tags":["Leony"],"security":[{"bearerAuth":[]},{"leonySession":[]}],"responses":{"200":{"description":"Successful Leony response.","content":{"application/json":{"schema":{"$id":"https://aweb-leony.vercel.app/schemas/leony-tool-result.json","type":"object","additionalProperties":false,"required":["tool","status","warnings","resources","output"],"properties":{"tool":{"type":"string"},"status":{"type":"string","enum":["ok"]},"warnings":{"type":"array","items":{"type":"string"}},"resources":{"type":"array","items":{"type":"string"}},"output":{"type":"object","additionalProperties":true},"persistence":{"type":"object","additionalProperties":true,"description":"Optional persistence posture attached by the Leony route handler."}}},"examples":{"ok":{"summary":"Tool result envelope.","value":{"tool":"leony_plan","status":"ok","warnings":[],"output":{"plan":{"id":"00000000-0000-4000-8000-000000000000","estimatedCostUsd":12.5,"estimatedLatencyMs":45000},"budgetExceeded":false}}}}}}},"400":{"description":"Invalid request.","content":{"application/json":{"schema":{"$id":"https://aweb-leony.vercel.app/schemas/leony-problem.json","type":"object","additionalProperties":false,"required":["error"],"properties":{"error":{"type":"object","additionalProperties":false,"required":["type","message","code","request_id"],"properties":{"type":{"type":"string","enum":["authentication_error","authorization_error","validation_error","rate_limit_error","execution_error","service_unavailable"]},"message":{"type":"string"},"code":{"type":"string"},"docs":{"type":"string","format":"uri"},"request_id":{"type":"string"}}}}},"examples":{"problem":{"summary":"Invalid request.","value":{"error":{"type":"validation_error","message":"Invalid request.","code":"invalid_request","docs":"https://aweb-leony.vercel.app/docs#auth","request_id":"00000000-0000-4000-8000-000000000000"}}}}}}},"401":{"description":"Authentication required.","content":{"application/json":{"schema":{"$id":"https://aweb-leony.vercel.app/schemas/leony-problem.json","type":"object","additionalProperties":false,"required":["error"],"properties":{"error":{"type":"object","additionalProperties":false,"required":["type","message","code","request_id"],"properties":{"type":{"type":"string","enum":["authentication_error","authorization_error","validation_error","rate_limit_error","execution_error","service_unavailable"]},"message":{"type":"string"},"code":{"type":"string"},"docs":{"type":"string","format":"uri"},"request_id":{"type":"string"}}}}},"examples":{"problem":{"summary":"Authentication required.","value":{"error":{"type":"validation_error","message":"Authentication required.","code":"invalid_request","docs":"https://aweb-leony.vercel.app/docs#auth","request_id":"00000000-0000-4000-8000-000000000000"}}}}}}},"403":{"description":"Insufficient Leony scope.","content":{"application/json":{"schema":{"$id":"https://aweb-leony.vercel.app/schemas/leony-problem.json","type":"object","additionalProperties":false,"required":["error"],"properties":{"error":{"type":"object","additionalProperties":false,"required":["type","message","code","request_id"],"properties":{"type":{"type":"string","enum":["authentication_error","authorization_error","validation_error","rate_limit_error","execution_error","service_unavailable"]},"message":{"type":"string"},"code":{"type":"string"},"docs":{"type":"string","format":"uri"},"request_id":{"type":"string"}}}}},"examples":{"problem":{"summary":"Insufficient Leony scope.","value":{"error":{"type":"validation_error","message":"Insufficient Leony scope.","code":"invalid_request","docs":"https://aweb-leony.vercel.app/docs#auth","request_id":"00000000-0000-4000-8000-000000000000"}}}}}}},"429":{"description":"Rate limit exceeded.","content":{"application/json":{"schema":{"$id":"https://aweb-leony.vercel.app/schemas/leony-problem.json","type":"object","additionalProperties":false,"required":["error"],"properties":{"error":{"type":"object","additionalProperties":false,"required":["type","message","code","request_id"],"properties":{"type":{"type":"string","enum":["authentication_error","authorization_error","validation_error","rate_limit_error","execution_error","service_unavailable"]},"message":{"type":"string"},"code":{"type":"string"},"docs":{"type":"string","format":"uri"},"request_id":{"type":"string"}}}}},"examples":{"problem":{"summary":"Rate limit exceeded.","value":{"error":{"type":"rate_limit_error","message":"Rate limit exceeded.","code":"rate_limit_exceeded","docs":"https://aweb-leony.vercel.app/docs#auth","request_id":"00000000-0000-4000-8000-000000000000"}}}}}}},"500":{"description":"Execution failed.","content":{"application/json":{"schema":{"$id":"https://aweb-leony.vercel.app/schemas/leony-problem.json","type":"object","additionalProperties":false,"required":["error"],"properties":{"error":{"type":"object","additionalProperties":false,"required":["type","message","code","request_id"],"properties":{"type":{"type":"string","enum":["authentication_error","authorization_error","validation_error","rate_limit_error","execution_error","service_unavailable"]},"message":{"type":"string"},"code":{"type":"string"},"docs":{"type":"string","format":"uri"},"request_id":{"type":"string"}}}}},"examples":{"problem":{"summary":"Execution failed.","value":{"error":{"type":"validation_error","message":"Execution failed.","code":"invalid_request","docs":"https://aweb-leony.vercel.app/docs#auth","request_id":"00000000-0000-4000-8000-000000000000"}}}}}}}}}},"/api/leony/v1/events":{"get":{"operationId":"get_api_leony_v1_events","summary":"Authenticated Leony live event stream over SSE with Last-Event-ID replay from the Neon event ledger.","tags":["Leony"],"security":[{"bearerAuth":[]},{"leonySession":[]}],"responses":{"200":{"description":"Leony event stream using Server-Sent Events.","content":{"text/event-stream":{"schema":{"type":"string"},"example":"event: leony_stream_ready\ndata: {\"product\":\"Leony by Aweb\",\"channel\":\"leony_events_v1\"}\n\n"}}},"400":{"description":"Invalid request.","content":{"application/json":{"schema":{"$id":"https://aweb-leony.vercel.app/schemas/leony-problem.json","type":"object","additionalProperties":false,"required":["error"],"properties":{"error":{"type":"object","additionalProperties":false,"required":["type","message","code","request_id"],"properties":{"type":{"type":"string","enum":["authentication_error","authorization_error","validation_error","rate_limit_error","execution_error","service_unavailable"]},"message":{"type":"string"},"code":{"type":"string"},"docs":{"type":"string","format":"uri"},"request_id":{"type":"string"}}}}},"examples":{"problem":{"summary":"Invalid request.","value":{"error":{"type":"validation_error","message":"Invalid request.","code":"invalid_request","docs":"https://aweb-leony.vercel.app/docs#auth","request_id":"00000000-0000-4000-8000-000000000000"}}}}}}},"401":{"description":"Authentication required.","content":{"application/json":{"schema":{"$id":"https://aweb-leony.vercel.app/schemas/leony-problem.json","type":"object","additionalProperties":false,"required":["error"],"properties":{"error":{"type":"object","additionalProperties":false,"required":["type","message","code","request_id"],"properties":{"type":{"type":"string","enum":["authentication_error","authorization_error","validation_error","rate_limit_error","execution_error","service_unavailable"]},"message":{"type":"string"},"code":{"type":"string"},"docs":{"type":"string","format":"uri"},"request_id":{"type":"string"}}}}},"examples":{"problem":{"summary":"Authentication required.","value":{"error":{"type":"validation_error","message":"Authentication required.","code":"invalid_request","docs":"https://aweb-leony.vercel.app/docs#auth","request_id":"00000000-0000-4000-8000-000000000000"}}}}}}},"403":{"description":"Insufficient Leony scope.","content":{"application/json":{"schema":{"$id":"https://aweb-leony.vercel.app/schemas/leony-problem.json","type":"object","additionalProperties":false,"required":["error"],"properties":{"error":{"type":"object","additionalProperties":false,"required":["type","message","code","request_id"],"properties":{"type":{"type":"string","enum":["authentication_error","authorization_error","validation_error","rate_limit_error","execution_error","service_unavailable"]},"message":{"type":"string"},"code":{"type":"string"},"docs":{"type":"string","format":"uri"},"request_id":{"type":"string"}}}}},"examples":{"problem":{"summary":"Insufficient Leony scope.","value":{"error":{"type":"validation_error","message":"Insufficient Leony scope.","code":"invalid_request","docs":"https://aweb-leony.vercel.app/docs#auth","request_id":"00000000-0000-4000-8000-000000000000"}}}}}}},"429":{"description":"Rate limit exceeded.","content":{"application/json":{"schema":{"$id":"https://aweb-leony.vercel.app/schemas/leony-problem.json","type":"object","additionalProperties":false,"required":["error"],"properties":{"error":{"type":"object","additionalProperties":false,"required":["type","message","code","request_id"],"properties":{"type":{"type":"string","enum":["authentication_error","authorization_error","validation_error","rate_limit_error","execution_error","service_unavailable"]},"message":{"type":"string"},"code":{"type":"string"},"docs":{"type":"string","format":"uri"},"request_id":{"type":"string"}}}}},"examples":{"problem":{"summary":"Rate limit exceeded.","value":{"error":{"type":"rate_limit_error","message":"Rate limit exceeded.","code":"rate_limit_exceeded","docs":"https://aweb-leony.vercel.app/docs#auth","request_id":"00000000-0000-4000-8000-000000000000"}}}}}}},"500":{"description":"Execution failed.","content":{"application/json":{"schema":{"$id":"https://aweb-leony.vercel.app/schemas/leony-problem.json","type":"object","additionalProperties":false,"required":["error"],"properties":{"error":{"type":"object","additionalProperties":false,"required":["type","message","code","request_id"],"properties":{"type":{"type":"string","enum":["authentication_error","authorization_error","validation_error","rate_limit_error","execution_error","service_unavailable"]},"message":{"type":"string"},"code":{"type":"string"},"docs":{"type":"string","format":"uri"},"request_id":{"type":"string"}}}}},"examples":{"problem":{"summary":"Execution failed.","value":{"error":{"type":"validation_error","message":"Execution failed.","code":"invalid_request","docs":"https://aweb-leony.vercel.app/docs#auth","request_id":"00000000-0000-4000-8000-000000000000"}}}}}}}}}},"/api/leony/v1/keys":{"get":{"operationId":"get_api_leony_v1_keys","summary":"List masked Leony API keys for the signed-in Aweb account.","tags":["Leony"],"security":[{"bearerAuth":[]},{"leonySession":[]}],"responses":{"200":{"description":"Masked Leony API key list.","content":{"application/json":{"schema":{"$id":"https://aweb-leony.vercel.app/schemas/leony-api-key-list.json","type":"object","additionalProperties":true,"required":["object","keys","count"],"properties":{"object":{"type":"string","enum":["list"]},"keys":{"type":"array","items":{"$ref":"#/components/schemas/LeonyApiKey"}},"count":{"type":"integer","minimum":0}}}}}},"400":{"description":"Invalid request.","content":{"application/json":{"schema":{"$id":"https://aweb-leony.vercel.app/schemas/leony-problem.json","type":"object","additionalProperties":false,"required":["error"],"properties":{"error":{"type":"object","additionalProperties":false,"required":["type","message","code","request_id"],"properties":{"type":{"type":"string","enum":["authentication_error","authorization_error","validation_error","rate_limit_error","execution_error","service_unavailable"]},"message":{"type":"string"},"code":{"type":"string"},"docs":{"type":"string","format":"uri"},"request_id":{"type":"string"}}}}},"examples":{"problem":{"summary":"Invalid request.","value":{"error":{"type":"validation_error","message":"Invalid request.","code":"invalid_request","docs":"https://aweb-leony.vercel.app/docs#auth","request_id":"00000000-0000-4000-8000-000000000000"}}}}}}},"401":{"description":"Authentication required.","content":{"application/json":{"schema":{"$id":"https://aweb-leony.vercel.app/schemas/leony-problem.json","type":"object","additionalProperties":false,"required":["error"],"properties":{"error":{"type":"object","additionalProperties":false,"required":["type","message","code","request_id"],"properties":{"type":{"type":"string","enum":["authentication_error","authorization_error","validation_error","rate_limit_error","execution_error","service_unavailable"]},"message":{"type":"string"},"code":{"type":"string"},"docs":{"type":"string","format":"uri"},"request_id":{"type":"string"}}}}},"examples":{"problem":{"summary":"Authentication required.","value":{"error":{"type":"validation_error","message":"Authentication required.","code":"invalid_request","docs":"https://aweb-leony.vercel.app/docs#auth","request_id":"00000000-0000-4000-8000-000000000000"}}}}}}},"403":{"description":"Insufficient Leony scope.","content":{"application/json":{"schema":{"$id":"https://aweb-leony.vercel.app/schemas/leony-problem.json","type":"object","additionalProperties":false,"required":["error"],"properties":{"error":{"type":"object","additionalProperties":false,"required":["type","message","code","request_id"],"properties":{"type":{"type":"string","enum":["authentication_error","authorization_error","validation_error","rate_limit_error","execution_error","service_unavailable"]},"message":{"type":"string"},"code":{"type":"string"},"docs":{"type":"string","format":"uri"},"request_id":{"type":"string"}}}}},"examples":{"problem":{"summary":"Insufficient Leony scope.","value":{"error":{"type":"validation_error","message":"Insufficient Leony scope.","code":"invalid_request","docs":"https://aweb-leony.vercel.app/docs#auth","request_id":"00000000-0000-4000-8000-000000000000"}}}}}}},"429":{"description":"Rate limit exceeded.","content":{"application/json":{"schema":{"$id":"https://aweb-leony.vercel.app/schemas/leony-problem.json","type":"object","additionalProperties":false,"required":["error"],"properties":{"error":{"type":"object","additionalProperties":false,"required":["type","message","code","request_id"],"properties":{"type":{"type":"string","enum":["authentication_error","authorization_error","validation_error","rate_limit_error","execution_error","service_unavailable"]},"message":{"type":"string"},"code":{"type":"string"},"docs":{"type":"string","format":"uri"},"request_id":{"type":"string"}}}}},"examples":{"problem":{"summary":"Rate limit exceeded.","value":{"error":{"type":"rate_limit_error","message":"Rate limit exceeded.","code":"rate_limit_exceeded","docs":"https://aweb-leony.vercel.app/docs#auth","request_id":"00000000-0000-4000-8000-000000000000"}}}}}}},"500":{"description":"Execution failed.","content":{"application/json":{"schema":{"$id":"https://aweb-leony.vercel.app/schemas/leony-problem.json","type":"object","additionalProperties":false,"required":["error"],"properties":{"error":{"type":"object","additionalProperties":false,"required":["type","message","code","request_id"],"properties":{"type":{"type":"string","enum":["authentication_error","authorization_error","validation_error","rate_limit_error","execution_error","service_unavailable"]},"message":{"type":"string"},"code":{"type":"string"},"docs":{"type":"string","format":"uri"},"request_id":{"type":"string"}}}}},"examples":{"problem":{"summary":"Execution failed.","value":{"error":{"type":"validation_error","message":"Execution failed.","code":"invalid_request","docs":"https://aweb-leony.vercel.app/docs#auth","request_id":"00000000-0000-4000-8000-000000000000"}}}}}}}}},"post":{"operationId":"post_api_leony_v1_keys","summary":"Create a scoped Leony API key in the shared Aweb credential ledger. The full secret is returned once.","tags":["Leony"],"security":[{"bearerAuth":[]},{"leonySession":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$id":"https://aweb-leony.vercel.app/schemas/leony-api-key-create-input.json","type":"object","additionalProperties":false,"required":["name","scopes"],"properties":{"name":{"type":"string","minLength":1,"maxLength":100},"scopes":{"type":"array","minItems":1,"maxItems":8,"uniqueItems":true,"items":{"type":"string","enum":["leony.read","leony.brief","leony.plan","leony.render","leony.publish","leony.worker","aweb.mcp.read","aweb.mcp.execute"]}},"expiresAt":{"type":"string","format":"date-time"},"allowedIps":{"type":"array","maxItems":25,"uniqueItems":true,"items":{"type":"string","pattern":"^(\\d{1,3}\\.){3}\\d{1,3}(/32)?$"}}}}}}},"responses":{"201":{"description":"Created Leony API key. The full secret is returned once.","content":{"application/json":{"schema":{"$id":"https://aweb-leony.vercel.app/schemas/leony-api-key.json","type":"object","additionalProperties":true,"required":["id","name","keyPrefix","scopes","createdAt"],"properties":{"id":{"type":"string","format":"uuid"},"name":{"type":"string"},"keyPrefix":{"type":"string"},"key":{"type":"string","description":"Full secret returned only by create-key responses."},"scopes":{"type":"array","items":{"type":"string","enum":["leony.read","leony.brief","leony.plan","leony.render","leony.publish","leony.worker","aweb.mcp.read","aweb.mcp.execute"]}},"usageCount":{"type":"integer","minimum":0},"rateLimitTier":{"type":"string"},"rateLimitPerMinute":{"type":"integer","minimum":1},"rateLimitPerDay":{"type":"integer","minimum":1},"allowedIps":{"type":["array","null"],"items":{"type":"string"}},"createdAt":{"type":"string","format":"date-time"},"expiresAt":{"type":["string","null"],"format":"date-time"},"revokedAt":{"type":["string","null"],"format":"date-time"}}}}}},"400":{"description":"Invalid request.","content":{"application/json":{"schema":{"$id":"https://aweb-leony.vercel.app/schemas/leony-problem.json","type":"object","additionalProperties":false,"required":["error"],"properties":{"error":{"type":"object","additionalProperties":false,"required":["type","message","code","request_id"],"properties":{"type":{"type":"string","enum":["authentication_error","authorization_error","validation_error","rate_limit_error","execution_error","service_unavailable"]},"message":{"type":"string"},"code":{"type":"string"},"docs":{"type":"string","format":"uri"},"request_id":{"type":"string"}}}}},"examples":{"problem":{"summary":"Invalid request.","value":{"error":{"type":"validation_error","message":"Invalid request.","code":"invalid_request","docs":"https://aweb-leony.vercel.app/docs#auth","request_id":"00000000-0000-4000-8000-000000000000"}}}}}}},"401":{"description":"Authentication required.","content":{"application/json":{"schema":{"$id":"https://aweb-leony.vercel.app/schemas/leony-problem.json","type":"object","additionalProperties":false,"required":["error"],"properties":{"error":{"type":"object","additionalProperties":false,"required":["type","message","code","request_id"],"properties":{"type":{"type":"string","enum":["authentication_error","authorization_error","validation_error","rate_limit_error","execution_error","service_unavailable"]},"message":{"type":"string"},"code":{"type":"string"},"docs":{"type":"string","format":"uri"},"request_id":{"type":"string"}}}}},"examples":{"problem":{"summary":"Authentication required.","value":{"error":{"type":"validation_error","message":"Authentication required.","code":"invalid_request","docs":"https://aweb-leony.vercel.app/docs#auth","request_id":"00000000-0000-4000-8000-000000000000"}}}}}}},"403":{"description":"Insufficient Leony scope.","content":{"application/json":{"schema":{"$id":"https://aweb-leony.vercel.app/schemas/leony-problem.json","type":"object","additionalProperties":false,"required":["error"],"properties":{"error":{"type":"object","additionalProperties":false,"required":["type","message","code","request_id"],"properties":{"type":{"type":"string","enum":["authentication_error","authorization_error","validation_error","rate_limit_error","execution_error","service_unavailable"]},"message":{"type":"string"},"code":{"type":"string"},"docs":{"type":"string","format":"uri"},"request_id":{"type":"string"}}}}},"examples":{"problem":{"summary":"Insufficient Leony scope.","value":{"error":{"type":"validation_error","message":"Insufficient Leony scope.","code":"invalid_request","docs":"https://aweb-leony.vercel.app/docs#auth","request_id":"00000000-0000-4000-8000-000000000000"}}}}}}},"429":{"description":"Rate limit exceeded.","content":{"application/json":{"schema":{"$id":"https://aweb-leony.vercel.app/schemas/leony-problem.json","type":"object","additionalProperties":false,"required":["error"],"properties":{"error":{"type":"object","additionalProperties":false,"required":["type","message","code","request_id"],"properties":{"type":{"type":"string","enum":["authentication_error","authorization_error","validation_error","rate_limit_error","execution_error","service_unavailable"]},"message":{"type":"string"},"code":{"type":"string"},"docs":{"type":"string","format":"uri"},"request_id":{"type":"string"}}}}},"examples":{"problem":{"summary":"Rate limit exceeded.","value":{"error":{"type":"rate_limit_error","message":"Rate limit exceeded.","code":"rate_limit_exceeded","docs":"https://aweb-leony.vercel.app/docs#auth","request_id":"00000000-0000-4000-8000-000000000000"}}}}}}},"500":{"description":"Execution failed.","content":{"application/json":{"schema":{"$id":"https://aweb-leony.vercel.app/schemas/leony-problem.json","type":"object","additionalProperties":false,"required":["error"],"properties":{"error":{"type":"object","additionalProperties":false,"required":["type","message","code","request_id"],"properties":{"type":{"type":"string","enum":["authentication_error","authorization_error","validation_error","rate_limit_error","execution_error","service_unavailable"]},"message":{"type":"string"},"code":{"type":"string"},"docs":{"type":"string","format":"uri"},"request_id":{"type":"string"}}}}},"examples":{"problem":{"summary":"Execution failed.","value":{"error":{"type":"validation_error","message":"Execution failed.","code":"invalid_request","docs":"https://aweb-leony.vercel.app/docs#auth","request_id":"00000000-0000-4000-8000-000000000000"}}}}}}}}}},"/api/leony/v1/keys/{id}":{"patch":{"operationId":"patch_api_leony_v1_keys_id","summary":"Update a Leony API key name, scopes, or IP allowlist.","tags":["Leony"],"security":[{"bearerAuth":[]},{"leonySession":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$id":"https://aweb-leony.vercel.app/schemas/leony-api-key-update-input.json","type":"object","additionalProperties":false,"minProperties":1,"properties":{"name":{"type":"string","minLength":1,"maxLength":100},"scopes":{"type":"array","minItems":1,"maxItems":8,"uniqueItems":true,"items":{"type":"string","enum":["leony.read","leony.brief","leony.plan","leony.render","leony.publish","leony.worker","aweb.mcp.read","aweb.mcp.execute"]}},"allowedIps":{"type":"array","maxItems":25,"uniqueItems":true,"items":{"type":"string","pattern":"^(\\d{1,3}\\.){3}\\d{1,3}(/32)?$"}}}}}}},"responses":{"200":{"description":"Updated Leony API key.","content":{"application/json":{"schema":{"$id":"https://aweb-leony.vercel.app/schemas/leony-api-key.json","type":"object","additionalProperties":true,"required":["id","name","keyPrefix","scopes","createdAt"],"properties":{"id":{"type":"string","format":"uuid"},"name":{"type":"string"},"keyPrefix":{"type":"string"},"key":{"type":"string","description":"Full secret returned only by create-key responses."},"scopes":{"type":"array","items":{"type":"string","enum":["leony.read","leony.brief","leony.plan","leony.render","leony.publish","leony.worker","aweb.mcp.read","aweb.mcp.execute"]}},"usageCount":{"type":"integer","minimum":0},"rateLimitTier":{"type":"string"},"rateLimitPerMinute":{"type":"integer","minimum":1},"rateLimitPerDay":{"type":"integer","minimum":1},"allowedIps":{"type":["array","null"],"items":{"type":"string"}},"createdAt":{"type":"string","format":"date-time"},"expiresAt":{"type":["string","null"],"format":"date-time"},"revokedAt":{"type":["string","null"],"format":"date-time"}}}}}},"400":{"description":"Invalid request.","content":{"application/json":{"schema":{"$id":"https://aweb-leony.vercel.app/schemas/leony-problem.json","type":"object","additionalProperties":false,"required":["error"],"properties":{"error":{"type":"object","additionalProperties":false,"required":["type","message","code","request_id"],"properties":{"type":{"type":"string","enum":["authentication_error","authorization_error","validation_error","rate_limit_error","execution_error","service_unavailable"]},"message":{"type":"string"},"code":{"type":"string"},"docs":{"type":"string","format":"uri"},"request_id":{"type":"string"}}}}},"examples":{"problem":{"summary":"Invalid request.","value":{"error":{"type":"validation_error","message":"Invalid request.","code":"invalid_request","docs":"https://aweb-leony.vercel.app/docs#auth","request_id":"00000000-0000-4000-8000-000000000000"}}}}}}},"401":{"description":"Authentication required.","content":{"application/json":{"schema":{"$id":"https://aweb-leony.vercel.app/schemas/leony-problem.json","type":"object","additionalProperties":false,"required":["error"],"properties":{"error":{"type":"object","additionalProperties":false,"required":["type","message","code","request_id"],"properties":{"type":{"type":"string","enum":["authentication_error","authorization_error","validation_error","rate_limit_error","execution_error","service_unavailable"]},"message":{"type":"string"},"code":{"type":"string"},"docs":{"type":"string","format":"uri"},"request_id":{"type":"string"}}}}},"examples":{"problem":{"summary":"Authentication required.","value":{"error":{"type":"validation_error","message":"Authentication required.","code":"invalid_request","docs":"https://aweb-leony.vercel.app/docs#auth","request_id":"00000000-0000-4000-8000-000000000000"}}}}}}},"403":{"description":"Insufficient Leony scope.","content":{"application/json":{"schema":{"$id":"https://aweb-leony.vercel.app/schemas/leony-problem.json","type":"object","additionalProperties":false,"required":["error"],"properties":{"error":{"type":"object","additionalProperties":false,"required":["type","message","code","request_id"],"properties":{"type":{"type":"string","enum":["authentication_error","authorization_error","validation_error","rate_limit_error","execution_error","service_unavailable"]},"message":{"type":"string"},"code":{"type":"string"},"docs":{"type":"string","format":"uri"},"request_id":{"type":"string"}}}}},"examples":{"problem":{"summary":"Insufficient Leony scope.","value":{"error":{"type":"validation_error","message":"Insufficient Leony scope.","code":"invalid_request","docs":"https://aweb-leony.vercel.app/docs#auth","request_id":"00000000-0000-4000-8000-000000000000"}}}}}}},"429":{"description":"Rate limit exceeded.","content":{"application/json":{"schema":{"$id":"https://aweb-leony.vercel.app/schemas/leony-problem.json","type":"object","additionalProperties":false,"required":["error"],"properties":{"error":{"type":"object","additionalProperties":false,"required":["type","message","code","request_id"],"properties":{"type":{"type":"string","enum":["authentication_error","authorization_error","validation_error","rate_limit_error","execution_error","service_unavailable"]},"message":{"type":"string"},"code":{"type":"string"},"docs":{"type":"string","format":"uri"},"request_id":{"type":"string"}}}}},"examples":{"problem":{"summary":"Rate limit exceeded.","value":{"error":{"type":"rate_limit_error","message":"Rate limit exceeded.","code":"rate_limit_exceeded","docs":"https://aweb-leony.vercel.app/docs#auth","request_id":"00000000-0000-4000-8000-000000000000"}}}}}}},"500":{"description":"Execution failed.","content":{"application/json":{"schema":{"$id":"https://aweb-leony.vercel.app/schemas/leony-problem.json","type":"object","additionalProperties":false,"required":["error"],"properties":{"error":{"type":"object","additionalProperties":false,"required":["type","message","code","request_id"],"properties":{"type":{"type":"string","enum":["authentication_error","authorization_error","validation_error","rate_limit_error","execution_error","service_unavailable"]},"message":{"type":"string"},"code":{"type":"string"},"docs":{"type":"string","format":"uri"},"request_id":{"type":"string"}}}}},"examples":{"problem":{"summary":"Execution failed.","value":{"error":{"type":"validation_error","message":"Execution failed.","code":"invalid_request","docs":"https://aweb-leony.vercel.app/docs#auth","request_id":"00000000-0000-4000-8000-000000000000"}}}}}}}}},"delete":{"operationId":"delete_api_leony_v1_keys_id","summary":"Revoke a Leony API key.","tags":["Leony"],"security":[{"bearerAuth":[]},{"leonySession":[]}],"responses":{"200":{"description":"Revoked Leony API key.","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid request.","content":{"application/json":{"schema":{"$id":"https://aweb-leony.vercel.app/schemas/leony-problem.json","type":"object","additionalProperties":false,"required":["error"],"properties":{"error":{"type":"object","additionalProperties":false,"required":["type","message","code","request_id"],"properties":{"type":{"type":"string","enum":["authentication_error","authorization_error","validation_error","rate_limit_error","execution_error","service_unavailable"]},"message":{"type":"string"},"code":{"type":"string"},"docs":{"type":"string","format":"uri"},"request_id":{"type":"string"}}}}},"examples":{"problem":{"summary":"Invalid request.","value":{"error":{"type":"validation_error","message":"Invalid request.","code":"invalid_request","docs":"https://aweb-leony.vercel.app/docs#auth","request_id":"00000000-0000-4000-8000-000000000000"}}}}}}},"401":{"description":"Authentication required.","content":{"application/json":{"schema":{"$id":"https://aweb-leony.vercel.app/schemas/leony-problem.json","type":"object","additionalProperties":false,"required":["error"],"properties":{"error":{"type":"object","additionalProperties":false,"required":["type","message","code","request_id"],"properties":{"type":{"type":"string","enum":["authentication_error","authorization_error","validation_error","rate_limit_error","execution_error","service_unavailable"]},"message":{"type":"string"},"code":{"type":"string"},"docs":{"type":"string","format":"uri"},"request_id":{"type":"string"}}}}},"examples":{"problem":{"summary":"Authentication required.","value":{"error":{"type":"validation_error","message":"Authentication required.","code":"invalid_request","docs":"https://aweb-leony.vercel.app/docs#auth","request_id":"00000000-0000-4000-8000-000000000000"}}}}}}},"403":{"description":"Insufficient Leony scope.","content":{"application/json":{"schema":{"$id":"https://aweb-leony.vercel.app/schemas/leony-problem.json","type":"object","additionalProperties":false,"required":["error"],"properties":{"error":{"type":"object","additionalProperties":false,"required":["type","message","code","request_id"],"properties":{"type":{"type":"string","enum":["authentication_error","authorization_error","validation_error","rate_limit_error","execution_error","service_unavailable"]},"message":{"type":"string"},"code":{"type":"string"},"docs":{"type":"string","format":"uri"},"request_id":{"type":"string"}}}}},"examples":{"problem":{"summary":"Insufficient Leony scope.","value":{"error":{"type":"validation_error","message":"Insufficient Leony scope.","code":"invalid_request","docs":"https://aweb-leony.vercel.app/docs#auth","request_id":"00000000-0000-4000-8000-000000000000"}}}}}}},"429":{"description":"Rate limit exceeded.","content":{"application/json":{"schema":{"$id":"https://aweb-leony.vercel.app/schemas/leony-problem.json","type":"object","additionalProperties":false,"required":["error"],"properties":{"error":{"type":"object","additionalProperties":false,"required":["type","message","code","request_id"],"properties":{"type":{"type":"string","enum":["authentication_error","authorization_error","validation_error","rate_limit_error","execution_error","service_unavailable"]},"message":{"type":"string"},"code":{"type":"string"},"docs":{"type":"string","format":"uri"},"request_id":{"type":"string"}}}}},"examples":{"problem":{"summary":"Rate limit exceeded.","value":{"error":{"type":"rate_limit_error","message":"Rate limit exceeded.","code":"rate_limit_exceeded","docs":"https://aweb-leony.vercel.app/docs#auth","request_id":"00000000-0000-4000-8000-000000000000"}}}}}}},"500":{"description":"Execution failed.","content":{"application/json":{"schema":{"$id":"https://aweb-leony.vercel.app/schemas/leony-problem.json","type":"object","additionalProperties":false,"required":["error"],"properties":{"error":{"type":"object","additionalProperties":false,"required":["type","message","code","request_id"],"properties":{"type":{"type":"string","enum":["authentication_error","authorization_error","validation_error","rate_limit_error","execution_error","service_unavailable"]},"message":{"type":"string"},"code":{"type":"string"},"docs":{"type":"string","format":"uri"},"request_id":{"type":"string"}}}}},"examples":{"problem":{"summary":"Execution failed.","value":{"error":{"type":"validation_error","message":"Execution failed.","code":"invalid_request","docs":"https://aweb-leony.vercel.app/docs#auth","request_id":"00000000-0000-4000-8000-000000000000"}}}}}}}}}},"/api/leony/v1/keys/{id}/usage":{"get":{"operationId":"get_api_leony_v1_keys_id_usage","summary":"Inspect usage logs and aggregate usage for one Leony API key.","tags":["Leony"],"security":[{"bearerAuth":[]},{"leonySession":[]}],"responses":{"200":{"description":"Leony API key usage and recent logs.","content":{"application/json":{"schema":{"$id":"https://aweb-leony.vercel.app/schemas/leony-api-key-usage.json","type":"object","additionalProperties":true,"required":["stats","capabilityBreakdown","logs"],"properties":{"stats":{"type":"object","additionalProperties":true},"capabilityBreakdown":{"type":"array","items":{"type":"object","additionalProperties":true}},"logs":{"type":"array","items":{"type":"object","additionalProperties":true}}}}}}},"400":{"description":"Invalid request.","content":{"application/json":{"schema":{"$id":"https://aweb-leony.vercel.app/schemas/leony-problem.json","type":"object","additionalProperties":false,"required":["error"],"properties":{"error":{"type":"object","additionalProperties":false,"required":["type","message","code","request_id"],"properties":{"type":{"type":"string","enum":["authentication_error","authorization_error","validation_error","rate_limit_error","execution_error","service_unavailable"]},"message":{"type":"string"},"code":{"type":"string"},"docs":{"type":"string","format":"uri"},"request_id":{"type":"string"}}}}},"examples":{"problem":{"summary":"Invalid request.","value":{"error":{"type":"validation_error","message":"Invalid request.","code":"invalid_request","docs":"https://aweb-leony.vercel.app/docs#auth","request_id":"00000000-0000-4000-8000-000000000000"}}}}}}},"401":{"description":"Authentication required.","content":{"application/json":{"schema":{"$id":"https://aweb-leony.vercel.app/schemas/leony-problem.json","type":"object","additionalProperties":false,"required":["error"],"properties":{"error":{"type":"object","additionalProperties":false,"required":["type","message","code","request_id"],"properties":{"type":{"type":"string","enum":["authentication_error","authorization_error","validation_error","rate_limit_error","execution_error","service_unavailable"]},"message":{"type":"string"},"code":{"type":"string"},"docs":{"type":"string","format":"uri"},"request_id":{"type":"string"}}}}},"examples":{"problem":{"summary":"Authentication required.","value":{"error":{"type":"validation_error","message":"Authentication required.","code":"invalid_request","docs":"https://aweb-leony.vercel.app/docs#auth","request_id":"00000000-0000-4000-8000-000000000000"}}}}}}},"403":{"description":"Insufficient Leony scope.","content":{"application/json":{"schema":{"$id":"https://aweb-leony.vercel.app/schemas/leony-problem.json","type":"object","additionalProperties":false,"required":["error"],"properties":{"error":{"type":"object","additionalProperties":false,"required":["type","message","code","request_id"],"properties":{"type":{"type":"string","enum":["authentication_error","authorization_error","validation_error","rate_limit_error","execution_error","service_unavailable"]},"message":{"type":"string"},"code":{"type":"string"},"docs":{"type":"string","format":"uri"},"request_id":{"type":"string"}}}}},"examples":{"problem":{"summary":"Insufficient Leony scope.","value":{"error":{"type":"validation_error","message":"Insufficient Leony scope.","code":"invalid_request","docs":"https://aweb-leony.vercel.app/docs#auth","request_id":"00000000-0000-4000-8000-000000000000"}}}}}}},"429":{"description":"Rate limit exceeded.","content":{"application/json":{"schema":{"$id":"https://aweb-leony.vercel.app/schemas/leony-problem.json","type":"object","additionalProperties":false,"required":["error"],"properties":{"error":{"type":"object","additionalProperties":false,"required":["type","message","code","request_id"],"properties":{"type":{"type":"string","enum":["authentication_error","authorization_error","validation_error","rate_limit_error","execution_error","service_unavailable"]},"message":{"type":"string"},"code":{"type":"string"},"docs":{"type":"string","format":"uri"},"request_id":{"type":"string"}}}}},"examples":{"problem":{"summary":"Rate limit exceeded.","value":{"error":{"type":"rate_limit_error","message":"Rate limit exceeded.","code":"rate_limit_exceeded","docs":"https://aweb-leony.vercel.app/docs#auth","request_id":"00000000-0000-4000-8000-000000000000"}}}}}}},"500":{"description":"Execution failed.","content":{"application/json":{"schema":{"$id":"https://aweb-leony.vercel.app/schemas/leony-problem.json","type":"object","additionalProperties":false,"required":["error"],"properties":{"error":{"type":"object","additionalProperties":false,"required":["type","message","code","request_id"],"properties":{"type":{"type":"string","enum":["authentication_error","authorization_error","validation_error","rate_limit_error","execution_error","service_unavailable"]},"message":{"type":"string"},"code":{"type":"string"},"docs":{"type":"string","format":"uri"},"request_id":{"type":"string"}}}}},"examples":{"problem":{"summary":"Execution failed.","value":{"error":{"type":"validation_error","message":"Execution failed.","code":"invalid_request","docs":"https://aweb-leony.vercel.app/docs#auth","request_id":"00000000-0000-4000-8000-000000000000"}}}}}}}}}},"/api/leony/v1/developer/access-check":{"get":{"operationId":"get_api_leony_v1_developer_access_check","summary":"Verify the current Leony session or bearer API key and return MCP connection metadata.","tags":["Leony"],"security":[{"bearerAuth":[]},{"leonySession":[]}],"responses":{"200":{"description":"Authenticated Leony access and MCP connection check.","content":{"application/json":{"schema":{"$id":"https://aweb-leony.vercel.app/schemas/leony-access-check.json","type":"object","additionalProperties":true,"required":["status","principal","mcp","governance"],"properties":{"status":{"type":"string","enum":["ok"]},"principal":{"type":"object","additionalProperties":true},"mcp":{"type":"object","additionalProperties":true},"governance":{"type":"object","additionalProperties":true}}}}}},"400":{"description":"Invalid request.","content":{"application/json":{"schema":{"$id":"https://aweb-leony.vercel.app/schemas/leony-problem.json","type":"object","additionalProperties":false,"required":["error"],"properties":{"error":{"type":"object","additionalProperties":false,"required":["type","message","code","request_id"],"properties":{"type":{"type":"string","enum":["authentication_error","authorization_error","validation_error","rate_limit_error","execution_error","service_unavailable"]},"message":{"type":"string"},"code":{"type":"string"},"docs":{"type":"string","format":"uri"},"request_id":{"type":"string"}}}}},"examples":{"problem":{"summary":"Invalid request.","value":{"error":{"type":"validation_error","message":"Invalid request.","code":"invalid_request","docs":"https://aweb-leony.vercel.app/docs#auth","request_id":"00000000-0000-4000-8000-000000000000"}}}}}}},"401":{"description":"Authentication required.","content":{"application/json":{"schema":{"$id":"https://aweb-leony.vercel.app/schemas/leony-problem.json","type":"object","additionalProperties":false,"required":["error"],"properties":{"error":{"type":"object","additionalProperties":false,"required":["type","message","code","request_id"],"properties":{"type":{"type":"string","enum":["authentication_error","authorization_error","validation_error","rate_limit_error","execution_error","service_unavailable"]},"message":{"type":"string"},"code":{"type":"string"},"docs":{"type":"string","format":"uri"},"request_id":{"type":"string"}}}}},"examples":{"problem":{"summary":"Authentication required.","value":{"error":{"type":"validation_error","message":"Authentication required.","code":"invalid_request","docs":"https://aweb-leony.vercel.app/docs#auth","request_id":"00000000-0000-4000-8000-000000000000"}}}}}}},"403":{"description":"Insufficient Leony scope.","content":{"application/json":{"schema":{"$id":"https://aweb-leony.vercel.app/schemas/leony-problem.json","type":"object","additionalProperties":false,"required":["error"],"properties":{"error":{"type":"object","additionalProperties":false,"required":["type","message","code","request_id"],"properties":{"type":{"type":"string","enum":["authentication_error","authorization_error","validation_error","rate_limit_error","execution_error","service_unavailable"]},"message":{"type":"string"},"code":{"type":"string"},"docs":{"type":"string","format":"uri"},"request_id":{"type":"string"}}}}},"examples":{"problem":{"summary":"Insufficient Leony scope.","value":{"error":{"type":"validation_error","message":"Insufficient Leony scope.","code":"invalid_request","docs":"https://aweb-leony.vercel.app/docs#auth","request_id":"00000000-0000-4000-8000-000000000000"}}}}}}},"429":{"description":"Rate limit exceeded.","content":{"application/json":{"schema":{"$id":"https://aweb-leony.vercel.app/schemas/leony-problem.json","type":"object","additionalProperties":false,"required":["error"],"properties":{"error":{"type":"object","additionalProperties":false,"required":["type","message","code","request_id"],"properties":{"type":{"type":"string","enum":["authentication_error","authorization_error","validation_error","rate_limit_error","execution_error","service_unavailable"]},"message":{"type":"string"},"code":{"type":"string"},"docs":{"type":"string","format":"uri"},"request_id":{"type":"string"}}}}},"examples":{"problem":{"summary":"Rate limit exceeded.","value":{"error":{"type":"rate_limit_error","message":"Rate limit exceeded.","code":"rate_limit_exceeded","docs":"https://aweb-leony.vercel.app/docs#auth","request_id":"00000000-0000-4000-8000-000000000000"}}}}}}},"500":{"description":"Execution failed.","content":{"application/json":{"schema":{"$id":"https://aweb-leony.vercel.app/schemas/leony-problem.json","type":"object","additionalProperties":false,"required":["error"],"properties":{"error":{"type":"object","additionalProperties":false,"required":["type","message","code","request_id"],"properties":{"type":{"type":"string","enum":["authentication_error","authorization_error","validation_error","rate_limit_error","execution_error","service_unavailable"]},"message":{"type":"string"},"code":{"type":"string"},"docs":{"type":"string","format":"uri"},"request_id":{"type":"string"}}}}},"examples":{"problem":{"summary":"Execution failed.","value":{"error":{"type":"validation_error","message":"Execution failed.","code":"invalid_request","docs":"https://aweb-leony.vercel.app/docs#auth","request_id":"00000000-0000-4000-8000-000000000000"}}}}}}}}}},"/api/leony/v1/brief":{"post":{"operationId":"post_api_leony_v1_brief","summary":"Create and persist a structured Leony creative brief through the governed runtime.","tags":["Leony"],"security":[{"bearerAuth":[]},{"leonySession":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$id":"https://aweb-leony.vercel.app/schemas/leony-brief-input.json","type":"object","additionalProperties":false,"required":["mode","prompt"],"properties":{"mode":{"type":"string","enum":["video","avatar","persona","voice","campaign","publish"],"description":"Leony creative mode."},"prompt":{"type":"string","minLength":1,"maxLength":4000,"description":"Creative command or production brief."},"title":{"type":"string","minLength":1,"maxLength":140,"description":"Human-readable project title."},"targetFormats":{"type":"array","description":"Requested output formats such as 9:16 social or 16:9 hero.","minItems":1,"maxItems":12,"items":{"type":"string","minLength":1,"maxLength":120},"uniqueItems":true},"channels":{"type":"array","minItems":1,"maxItems":12,"uniqueItems":true,"items":{"type":"string","enum":["tiktok","instagram","youtube_shorts","linkedin","x_twitter","pinterest","shopify","gumroad","manual_export"],"description":"Target publish or export channel."}},"managedByAweb":{"type":"boolean","default":true}}},"examples":{"cinematicBrief":{"summary":"Create a governed cinematic brief.","value":{"mode":"video","prompt":"Create a premium 9:16 AI film trailer for a new Leony launch.","title":"Leony launch trailer","targetFormats":["9:16 social"],"channels":["instagram","tiktok"],"managedByAweb":true}}}}}},"responses":{"200":{"description":"Successful Leony response.","content":{"application/json":{"schema":{"$id":"https://aweb-leony.vercel.app/schemas/leony-tool-result.json","type":"object","additionalProperties":false,"required":["tool","status","warnings","resources","output"],"properties":{"tool":{"type":"string"},"status":{"type":"string","enum":["ok"]},"warnings":{"type":"array","items":{"type":"string"}},"resources":{"type":"array","items":{"type":"string"}},"output":{"type":"object","additionalProperties":true},"persistence":{"type":"object","additionalProperties":true,"description":"Optional persistence posture attached by the Leony route handler."}}},"examples":{"ok":{"summary":"Tool result envelope.","value":{"tool":"leony_plan","status":"ok","warnings":[],"output":{"plan":{"id":"00000000-0000-4000-8000-000000000000","estimatedCostUsd":12.5,"estimatedLatencyMs":45000},"budgetExceeded":false}}}}}}},"400":{"description":"Invalid request.","content":{"application/json":{"schema":{"$id":"https://aweb-leony.vercel.app/schemas/leony-problem.json","type":"object","additionalProperties":false,"required":["error"],"properties":{"error":{"type":"object","additionalProperties":false,"required":["type","message","code","request_id"],"properties":{"type":{"type":"string","enum":["authentication_error","authorization_error","validation_error","rate_limit_error","execution_error","service_unavailable"]},"message":{"type":"string"},"code":{"type":"string"},"docs":{"type":"string","format":"uri"},"request_id":{"type":"string"}}}}},"examples":{"problem":{"summary":"Invalid request.","value":{"error":{"type":"validation_error","message":"Invalid request.","code":"invalid_request","docs":"https://aweb-leony.vercel.app/docs#auth","request_id":"00000000-0000-4000-8000-000000000000"}}}}}}},"401":{"description":"Authentication required.","content":{"application/json":{"schema":{"$id":"https://aweb-leony.vercel.app/schemas/leony-problem.json","type":"object","additionalProperties":false,"required":["error"],"properties":{"error":{"type":"object","additionalProperties":false,"required":["type","message","code","request_id"],"properties":{"type":{"type":"string","enum":["authentication_error","authorization_error","validation_error","rate_limit_error","execution_error","service_unavailable"]},"message":{"type":"string"},"code":{"type":"string"},"docs":{"type":"string","format":"uri"},"request_id":{"type":"string"}}}}},"examples":{"problem":{"summary":"Authentication required.","value":{"error":{"type":"validation_error","message":"Authentication required.","code":"invalid_request","docs":"https://aweb-leony.vercel.app/docs#auth","request_id":"00000000-0000-4000-8000-000000000000"}}}}}}},"403":{"description":"Insufficient Leony scope.","content":{"application/json":{"schema":{"$id":"https://aweb-leony.vercel.app/schemas/leony-problem.json","type":"object","additionalProperties":false,"required":["error"],"properties":{"error":{"type":"object","additionalProperties":false,"required":["type","message","code","request_id"],"properties":{"type":{"type":"string","enum":["authentication_error","authorization_error","validation_error","rate_limit_error","execution_error","service_unavailable"]},"message":{"type":"string"},"code":{"type":"string"},"docs":{"type":"string","format":"uri"},"request_id":{"type":"string"}}}}},"examples":{"problem":{"summary":"Insufficient Leony scope.","value":{"error":{"type":"validation_error","message":"Insufficient Leony scope.","code":"invalid_request","docs":"https://aweb-leony.vercel.app/docs#auth","request_id":"00000000-0000-4000-8000-000000000000"}}}}}}},"429":{"description":"Rate limit exceeded.","content":{"application/json":{"schema":{"$id":"https://aweb-leony.vercel.app/schemas/leony-problem.json","type":"object","additionalProperties":false,"required":["error"],"properties":{"error":{"type":"object","additionalProperties":false,"required":["type","message","code","request_id"],"properties":{"type":{"type":"string","enum":["authentication_error","authorization_error","validation_error","rate_limit_error","execution_error","service_unavailable"]},"message":{"type":"string"},"code":{"type":"string"},"docs":{"type":"string","format":"uri"},"request_id":{"type":"string"}}}}},"examples":{"problem":{"summary":"Rate limit exceeded.","value":{"error":{"type":"rate_limit_error","message":"Rate limit exceeded.","code":"rate_limit_exceeded","docs":"https://aweb-leony.vercel.app/docs#auth","request_id":"00000000-0000-4000-8000-000000000000"}}}}}}},"500":{"description":"Execution failed.","content":{"application/json":{"schema":{"$id":"https://aweb-leony.vercel.app/schemas/leony-problem.json","type":"object","additionalProperties":false,"required":["error"],"properties":{"error":{"type":"object","additionalProperties":false,"required":["type","message","code","request_id"],"properties":{"type":{"type":"string","enum":["authentication_error","authorization_error","validation_error","rate_limit_error","execution_error","service_unavailable"]},"message":{"type":"string"},"code":{"type":"string"},"docs":{"type":"string","format":"uri"},"request_id":{"type":"string"}}}}},"examples":{"problem":{"summary":"Execution failed.","value":{"error":{"type":"validation_error","message":"Execution failed.","code":"invalid_request","docs":"https://aweb-leony.vercel.app/docs#auth","request_id":"00000000-0000-4000-8000-000000000000"}}}}}}}}}},"/api/leony/v1/plan":{"post":{"operationId":"post_api_leony_v1_plan","summary":"Create and persist a costed Leony provider route with approval and budget boundaries.","tags":["Leony"],"security":[{"bearerAuth":[]},{"leonySession":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$id":"https://aweb-leony.vercel.app/schemas/leony-plan-input.json","type":"object","additionalProperties":false,"anyOf":[{"required":["briefId"]},{"required":["prompt","mode"]}],"properties":{"briefId":{"type":"string","minLength":1,"maxLength":80,"description":"Existing Leony brief id."},"prompt":{"type":"string","minLength":1,"maxLength":4000,"description":"Creative command used when creating a plan without a prior brief."},"mode":{"type":"string","enum":["video","avatar","persona","voice","campaign","publish"],"description":"Leony creative mode."},"routePolicy":{"type":"string","enum":["quality_first","speed_first","cost_guarded","balanced"],"default":"balanced","description":"Provider routing preference used for plan generation."},"targetFormats":{"type":"array","description":"Requested output formats for this plan.","minItems":1,"maxItems":12,"items":{"type":"string","minLength":1,"maxLength":120},"uniqueItems":true},"budgetUsd":{"type":"number","minimum":0,"maximum":10000,"description":"Optional operator budget ceiling for the plan."}}},"examples":{"costedPlan":{"summary":"Create a provider route and approval boundary.","value":{"mode":"video","prompt":"Create a premium 9:16 AI film trailer for a new Leony launch.","routePolicy":"balanced","targetFormats":["9:16 social"],"budgetUsd":25}}}}}},"responses":{"200":{"description":"Successful Leony response.","content":{"application/json":{"schema":{"$id":"https://aweb-leony.vercel.app/schemas/leony-tool-result.json","type":"object","additionalProperties":false,"required":["tool","status","warnings","resources","output"],"properties":{"tool":{"type":"string"},"status":{"type":"string","enum":["ok"]},"warnings":{"type":"array","items":{"type":"string"}},"resources":{"type":"array","items":{"type":"string"}},"output":{"type":"object","additionalProperties":true},"persistence":{"type":"object","additionalProperties":true,"description":"Optional persistence posture attached by the Leony route handler."}}},"examples":{"ok":{"summary":"Tool result envelope.","value":{"tool":"leony_plan","status":"ok","warnings":[],"output":{"plan":{"id":"00000000-0000-4000-8000-000000000000","estimatedCostUsd":12.5,"estimatedLatencyMs":45000},"budgetExceeded":false}}}}}}},"400":{"description":"Invalid request.","content":{"application/json":{"schema":{"$id":"https://aweb-leony.vercel.app/schemas/leony-problem.json","type":"object","additionalProperties":false,"required":["error"],"properties":{"error":{"type":"object","additionalProperties":false,"required":["type","message","code","request_id"],"properties":{"type":{"type":"string","enum":["authentication_error","authorization_error","validation_error","rate_limit_error","execution_error","service_unavailable"]},"message":{"type":"string"},"code":{"type":"string"},"docs":{"type":"string","format":"uri"},"request_id":{"type":"string"}}}}},"examples":{"problem":{"summary":"Invalid request.","value":{"error":{"type":"validation_error","message":"Invalid request.","code":"invalid_request","docs":"https://aweb-leony.vercel.app/docs#auth","request_id":"00000000-0000-4000-8000-000000000000"}}}}}}},"401":{"description":"Authentication required.","content":{"application/json":{"schema":{"$id":"https://aweb-leony.vercel.app/schemas/leony-problem.json","type":"object","additionalProperties":false,"required":["error"],"properties":{"error":{"type":"object","additionalProperties":false,"required":["type","message","code","request_id"],"properties":{"type":{"type":"string","enum":["authentication_error","authorization_error","validation_error","rate_limit_error","execution_error","service_unavailable"]},"message":{"type":"string"},"code":{"type":"string"},"docs":{"type":"string","format":"uri"},"request_id":{"type":"string"}}}}},"examples":{"problem":{"summary":"Authentication required.","value":{"error":{"type":"validation_error","message":"Authentication required.","code":"invalid_request","docs":"https://aweb-leony.vercel.app/docs#auth","request_id":"00000000-0000-4000-8000-000000000000"}}}}}}},"403":{"description":"Insufficient Leony scope.","content":{"application/json":{"schema":{"$id":"https://aweb-leony.vercel.app/schemas/leony-problem.json","type":"object","additionalProperties":false,"required":["error"],"properties":{"error":{"type":"object","additionalProperties":false,"required":["type","message","code","request_id"],"properties":{"type":{"type":"string","enum":["authentication_error","authorization_error","validation_error","rate_limit_error","execution_error","service_unavailable"]},"message":{"type":"string"},"code":{"type":"string"},"docs":{"type":"string","format":"uri"},"request_id":{"type":"string"}}}}},"examples":{"problem":{"summary":"Insufficient Leony scope.","value":{"error":{"type":"validation_error","message":"Insufficient Leony scope.","code":"invalid_request","docs":"https://aweb-leony.vercel.app/docs#auth","request_id":"00000000-0000-4000-8000-000000000000"}}}}}}},"429":{"description":"Rate limit exceeded.","content":{"application/json":{"schema":{"$id":"https://aweb-leony.vercel.app/schemas/leony-problem.json","type":"object","additionalProperties":false,"required":["error"],"properties":{"error":{"type":"object","additionalProperties":false,"required":["type","message","code","request_id"],"properties":{"type":{"type":"string","enum":["authentication_error","authorization_error","validation_error","rate_limit_error","execution_error","service_unavailable"]},"message":{"type":"string"},"code":{"type":"string"},"docs":{"type":"string","format":"uri"},"request_id":{"type":"string"}}}}},"examples":{"problem":{"summary":"Rate limit exceeded.","value":{"error":{"type":"rate_limit_error","message":"Rate limit exceeded.","code":"rate_limit_exceeded","docs":"https://aweb-leony.vercel.app/docs#auth","request_id":"00000000-0000-4000-8000-000000000000"}}}}}}},"500":{"description":"Execution failed.","content":{"application/json":{"schema":{"$id":"https://aweb-leony.vercel.app/schemas/leony-problem.json","type":"object","additionalProperties":false,"required":["error"],"properties":{"error":{"type":"object","additionalProperties":false,"required":["type","message","code","request_id"],"properties":{"type":{"type":"string","enum":["authentication_error","authorization_error","validation_error","rate_limit_error","execution_error","service_unavailable"]},"message":{"type":"string"},"code":{"type":"string"},"docs":{"type":"string","format":"uri"},"request_id":{"type":"string"}}}}},"examples":{"problem":{"summary":"Execution failed.","value":{"error":{"type":"validation_error","message":"Execution failed.","code":"invalid_request","docs":"https://aweb-leony.vercel.app/docs#auth","request_id":"00000000-0000-4000-8000-000000000000"}}}}}}}}}},"/api/leony/v1/render":{"post":{"operationId":"post_api_leony_v1_render","summary":"Prepare or queue a governed Leony render job. Provider spend remains approval-gated.","tags":["Leony"],"security":[{"bearerAuth":[]},{"leonySession":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$id":"https://aweb-leony.vercel.app/schemas/leony-render-input.json","type":"object","additionalProperties":false,"required":["planId","dryRun"],"properties":{"planId":{"type":"string","minLength":1,"maxLength":80,"description":"Leony render plan id."},"dryRun":{"type":"boolean","description":"When true, create the approval boundary without provider execution."},"approvalRef":{"type":"string","minLength":1,"maxLength":160,"description":"Approval reference required before live provider execution."},"maxCostUsd":{"type":"number","exclusiveMinimum":0,"maximum":10000,"description":"Hard cost ceiling for a governed render attempt."}}},"examples":{"dryRunRender":{"summary":"Queue a governed render without provider spend.","value":{"planId":"00000000-0000-4000-8000-000000000000","dryRun":true,"approvalRequired":true,"maxCostUsd":25}}}}}},"responses":{"200":{"description":"Successful Leony response.","content":{"application/json":{"schema":{"$id":"https://aweb-leony.vercel.app/schemas/leony-tool-result.json","type":"object","additionalProperties":false,"required":["tool","status","warnings","resources","output"],"properties":{"tool":{"type":"string"},"status":{"type":"string","enum":["ok"]},"warnings":{"type":"array","items":{"type":"string"}},"resources":{"type":"array","items":{"type":"string"}},"output":{"type":"object","additionalProperties":true},"persistence":{"type":"object","additionalProperties":true,"description":"Optional persistence posture attached by the Leony route handler."}}},"examples":{"ok":{"summary":"Tool result envelope.","value":{"tool":"leony_plan","status":"ok","warnings":[],"output":{"plan":{"id":"00000000-0000-4000-8000-000000000000","estimatedCostUsd":12.5,"estimatedLatencyMs":45000},"budgetExceeded":false}}}}}}},"400":{"description":"Invalid request.","content":{"application/json":{"schema":{"$id":"https://aweb-leony.vercel.app/schemas/leony-problem.json","type":"object","additionalProperties":false,"required":["error"],"properties":{"error":{"type":"object","additionalProperties":false,"required":["type","message","code","request_id"],"properties":{"type":{"type":"string","enum":["authentication_error","authorization_error","validation_error","rate_limit_error","execution_error","service_unavailable"]},"message":{"type":"string"},"code":{"type":"string"},"docs":{"type":"string","format":"uri"},"request_id":{"type":"string"}}}}},"examples":{"problem":{"summary":"Invalid request.","value":{"error":{"type":"validation_error","message":"Invalid request.","code":"invalid_request","docs":"https://aweb-leony.vercel.app/docs#auth","request_id":"00000000-0000-4000-8000-000000000000"}}}}}}},"401":{"description":"Authentication required.","content":{"application/json":{"schema":{"$id":"https://aweb-leony.vercel.app/schemas/leony-problem.json","type":"object","additionalProperties":false,"required":["error"],"properties":{"error":{"type":"object","additionalProperties":false,"required":["type","message","code","request_id"],"properties":{"type":{"type":"string","enum":["authentication_error","authorization_error","validation_error","rate_limit_error","execution_error","service_unavailable"]},"message":{"type":"string"},"code":{"type":"string"},"docs":{"type":"string","format":"uri"},"request_id":{"type":"string"}}}}},"examples":{"problem":{"summary":"Authentication required.","value":{"error":{"type":"validation_error","message":"Authentication required.","code":"invalid_request","docs":"https://aweb-leony.vercel.app/docs#auth","request_id":"00000000-0000-4000-8000-000000000000"}}}}}}},"403":{"description":"Insufficient Leony scope.","content":{"application/json":{"schema":{"$id":"https://aweb-leony.vercel.app/schemas/leony-problem.json","type":"object","additionalProperties":false,"required":["error"],"properties":{"error":{"type":"object","additionalProperties":false,"required":["type","message","code","request_id"],"properties":{"type":{"type":"string","enum":["authentication_error","authorization_error","validation_error","rate_limit_error","execution_error","service_unavailable"]},"message":{"type":"string"},"code":{"type":"string"},"docs":{"type":"string","format":"uri"},"request_id":{"type":"string"}}}}},"examples":{"problem":{"summary":"Insufficient Leony scope.","value":{"error":{"type":"validation_error","message":"Insufficient Leony scope.","code":"invalid_request","docs":"https://aweb-leony.vercel.app/docs#auth","request_id":"00000000-0000-4000-8000-000000000000"}}}}}}},"429":{"description":"Rate limit exceeded.","content":{"application/json":{"schema":{"$id":"https://aweb-leony.vercel.app/schemas/leony-problem.json","type":"object","additionalProperties":false,"required":["error"],"properties":{"error":{"type":"object","additionalProperties":false,"required":["type","message","code","request_id"],"properties":{"type":{"type":"string","enum":["authentication_error","authorization_error","validation_error","rate_limit_error","execution_error","service_unavailable"]},"message":{"type":"string"},"code":{"type":"string"},"docs":{"type":"string","format":"uri"},"request_id":{"type":"string"}}}}},"examples":{"problem":{"summary":"Rate limit exceeded.","value":{"error":{"type":"rate_limit_error","message":"Rate limit exceeded.","code":"rate_limit_exceeded","docs":"https://aweb-leony.vercel.app/docs#auth","request_id":"00000000-0000-4000-8000-000000000000"}}}}}}},"500":{"description":"Execution failed.","content":{"application/json":{"schema":{"$id":"https://aweb-leony.vercel.app/schemas/leony-problem.json","type":"object","additionalProperties":false,"required":["error"],"properties":{"error":{"type":"object","additionalProperties":false,"required":["type","message","code","request_id"],"properties":{"type":{"type":"string","enum":["authentication_error","authorization_error","validation_error","rate_limit_error","execution_error","service_unavailable"]},"message":{"type":"string"},"code":{"type":"string"},"docs":{"type":"string","format":"uri"},"request_id":{"type":"string"}}}}},"examples":{"problem":{"summary":"Execution failed.","value":{"error":{"type":"validation_error","message":"Execution failed.","code":"invalid_request","docs":"https://aweb-leony.vercel.app/docs#auth","request_id":"00000000-0000-4000-8000-000000000000"}}}}}}}}}},"/api/leony/v1/publish":{"post":{"operationId":"post_api_leony_v1_publish","summary":"Create an approval-gated Leony social/commercial publish or export request without direct external posting by default.","tags":["Leony"],"security":[{"bearerAuth":[]},{"leonySession":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$id":"https://aweb-leony.vercel.app/schemas/leony-publish-input.json","type":"object","additionalProperties":false,"anyOf":[{"required":["assetId"]},{"required":["planId"]}],"required":["channels","dryRun"],"properties":{"assetId":{"type":"string","minLength":1,"maxLength":120,"description":"Leony or Aweb asset id to publish/export."},"planId":{"type":"string","minLength":1,"maxLength":80,"description":"Plan id to use as publish/export context."},"channels":{"type":"array","minItems":1,"maxItems":12,"uniqueItems":true,"items":{"type":"string","enum":["tiktok","instagram","youtube_shorts","linkedin","x_twitter","pinterest","shopify","gumroad","manual_export"],"description":"Target publish or export channel."}},"dryRun":{"type":"boolean","description":"When true, create only an approval/outbox package."},"approvalRef":{"type":"string","minLength":1,"maxLength":160,"description":"Approval reference required before external publishing."}}},"examples":{"publishPackage":{"summary":"Prepare approval-gated social publishing.","value":{"planId":"00000000-0000-4000-8000-000000000000","channels":["instagram","tiktok"],"dryRun":true}}}}}},"responses":{"200":{"description":"Successful Leony response.","content":{"application/json":{"schema":{"$id":"https://aweb-leony.vercel.app/schemas/leony-tool-result.json","type":"object","additionalProperties":false,"required":["tool","status","warnings","resources","output"],"properties":{"tool":{"type":"string"},"status":{"type":"string","enum":["ok"]},"warnings":{"type":"array","items":{"type":"string"}},"resources":{"type":"array","items":{"type":"string"}},"output":{"type":"object","additionalProperties":true},"persistence":{"type":"object","additionalProperties":true,"description":"Optional persistence posture attached by the Leony route handler."}}},"examples":{"ok":{"summary":"Tool result envelope.","value":{"tool":"leony_plan","status":"ok","warnings":[],"output":{"plan":{"id":"00000000-0000-4000-8000-000000000000","estimatedCostUsd":12.5,"estimatedLatencyMs":45000},"budgetExceeded":false}}}}}}},"400":{"description":"Invalid request.","content":{"application/json":{"schema":{"$id":"https://aweb-leony.vercel.app/schemas/leony-problem.json","type":"object","additionalProperties":false,"required":["error"],"properties":{"error":{"type":"object","additionalProperties":false,"required":["type","message","code","request_id"],"properties":{"type":{"type":"string","enum":["authentication_error","authorization_error","validation_error","rate_limit_error","execution_error","service_unavailable"]},"message":{"type":"string"},"code":{"type":"string"},"docs":{"type":"string","format":"uri"},"request_id":{"type":"string"}}}}},"examples":{"problem":{"summary":"Invalid request.","value":{"error":{"type":"validation_error","message":"Invalid request.","code":"invalid_request","docs":"https://aweb-leony.vercel.app/docs#auth","request_id":"00000000-0000-4000-8000-000000000000"}}}}}}},"401":{"description":"Authentication required.","content":{"application/json":{"schema":{"$id":"https://aweb-leony.vercel.app/schemas/leony-problem.json","type":"object","additionalProperties":false,"required":["error"],"properties":{"error":{"type":"object","additionalProperties":false,"required":["type","message","code","request_id"],"properties":{"type":{"type":"string","enum":["authentication_error","authorization_error","validation_error","rate_limit_error","execution_error","service_unavailable"]},"message":{"type":"string"},"code":{"type":"string"},"docs":{"type":"string","format":"uri"},"request_id":{"type":"string"}}}}},"examples":{"problem":{"summary":"Authentication required.","value":{"error":{"type":"validation_error","message":"Authentication required.","code":"invalid_request","docs":"https://aweb-leony.vercel.app/docs#auth","request_id":"00000000-0000-4000-8000-000000000000"}}}}}}},"403":{"description":"Insufficient Leony scope.","content":{"application/json":{"schema":{"$id":"https://aweb-leony.vercel.app/schemas/leony-problem.json","type":"object","additionalProperties":false,"required":["error"],"properties":{"error":{"type":"object","additionalProperties":false,"required":["type","message","code","request_id"],"properties":{"type":{"type":"string","enum":["authentication_error","authorization_error","validation_error","rate_limit_error","execution_error","service_unavailable"]},"message":{"type":"string"},"code":{"type":"string"},"docs":{"type":"string","format":"uri"},"request_id":{"type":"string"}}}}},"examples":{"problem":{"summary":"Insufficient Leony scope.","value":{"error":{"type":"validation_error","message":"Insufficient Leony scope.","code":"invalid_request","docs":"https://aweb-leony.vercel.app/docs#auth","request_id":"00000000-0000-4000-8000-000000000000"}}}}}}},"429":{"description":"Rate limit exceeded.","content":{"application/json":{"schema":{"$id":"https://aweb-leony.vercel.app/schemas/leony-problem.json","type":"object","additionalProperties":false,"required":["error"],"properties":{"error":{"type":"object","additionalProperties":false,"required":["type","message","code","request_id"],"properties":{"type":{"type":"string","enum":["authentication_error","authorization_error","validation_error","rate_limit_error","execution_error","service_unavailable"]},"message":{"type":"string"},"code":{"type":"string"},"docs":{"type":"string","format":"uri"},"request_id":{"type":"string"}}}}},"examples":{"problem":{"summary":"Rate limit exceeded.","value":{"error":{"type":"rate_limit_error","message":"Rate limit exceeded.","code":"rate_limit_exceeded","docs":"https://aweb-leony.vercel.app/docs#auth","request_id":"00000000-0000-4000-8000-000000000000"}}}}}}},"500":{"description":"Execution failed.","content":{"application/json":{"schema":{"$id":"https://aweb-leony.vercel.app/schemas/leony-problem.json","type":"object","additionalProperties":false,"required":["error"],"properties":{"error":{"type":"object","additionalProperties":false,"required":["type","message","code","request_id"],"properties":{"type":{"type":"string","enum":["authentication_error","authorization_error","validation_error","rate_limit_error","execution_error","service_unavailable"]},"message":{"type":"string"},"code":{"type":"string"},"docs":{"type":"string","format":"uri"},"request_id":{"type":"string"}}}}},"examples":{"problem":{"summary":"Execution failed.","value":{"error":{"type":"validation_error","message":"Execution failed.","code":"invalid_request","docs":"https://aweb-leony.vercel.app/docs#auth","request_id":"00000000-0000-4000-8000-000000000000"}}}}}}}}}},"/api/leony/v1/worker/run":{"post":{"operationId":"post_api_leony_v1_worker_run","summary":"Run the guarded Leony execution worker. It processes only approved queued work and requires worker credentials for provider calls.","tags":["Leony"],"security":[{"bearerAuth":[]},{"leonySession":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"dryRun":{"type":"boolean","default":true},"limit":{"type":"integer","minimum":1,"maximum":10,"default":3}}},"examples":{"guardedDryRun":{"summary":"Run the worker without external provider calls.","value":{"dryRun":true,"limit":3}}}}}},"responses":{"200":{"description":"Guarded worker run result.","content":{"application/json":{"schema":{"$id":"https://aweb-leony.vercel.app/schemas/leony-worker-run-result.json","type":"object","additionalProperties":true,"required":["status","providerCallsEnabled","processed","items"],"properties":{"status":{"type":"string","enum":["ok","disabled","blocked"]},"providerCallsEnabled":{"type":"boolean"},"processed":{"type":"integer","minimum":0},"items":{"type":"array","items":{"type":"object","additionalProperties":true}}}},"examples":{"dryRun":{"summary":"No provider call was made.","value":{"status":"ok","providerCallsEnabled":false,"processed":1,"items":[{"jobId":"00000000-0000-4000-8000-000000000000","projectId":"00000000-0000-4000-8000-000000000001","planId":"00000000-0000-4000-8000-000000000002","status":"dry_run","reason":"dry_run","providerId":"runwayml","capabilitySlug":"video.generate"}],"warnings":["Provider execution is disabled until LEONY_WORKER_ENABLE_PROVIDER_CALLS=true and a worker API key are configured."]}}}}}},"400":{"description":"Invalid request.","content":{"application/json":{"schema":{"$id":"https://aweb-leony.vercel.app/schemas/leony-problem.json","type":"object","additionalProperties":false,"required":["error"],"properties":{"error":{"type":"object","additionalProperties":false,"required":["type","message","code","request_id"],"properties":{"type":{"type":"string","enum":["authentication_error","authorization_error","validation_error","rate_limit_error","execution_error","service_unavailable"]},"message":{"type":"string"},"code":{"type":"string"},"docs":{"type":"string","format":"uri"},"request_id":{"type":"string"}}}}},"examples":{"problem":{"summary":"Invalid request.","value":{"error":{"type":"validation_error","message":"Invalid request.","code":"invalid_request","docs":"https://aweb-leony.vercel.app/docs#auth","request_id":"00000000-0000-4000-8000-000000000000"}}}}}}},"401":{"description":"Authentication required.","content":{"application/json":{"schema":{"$id":"https://aweb-leony.vercel.app/schemas/leony-problem.json","type":"object","additionalProperties":false,"required":["error"],"properties":{"error":{"type":"object","additionalProperties":false,"required":["type","message","code","request_id"],"properties":{"type":{"type":"string","enum":["authentication_error","authorization_error","validation_error","rate_limit_error","execution_error","service_unavailable"]},"message":{"type":"string"},"code":{"type":"string"},"docs":{"type":"string","format":"uri"},"request_id":{"type":"string"}}}}},"examples":{"problem":{"summary":"Authentication required.","value":{"error":{"type":"validation_error","message":"Authentication required.","code":"invalid_request","docs":"https://aweb-leony.vercel.app/docs#auth","request_id":"00000000-0000-4000-8000-000000000000"}}}}}}},"403":{"description":"Insufficient Leony scope.","content":{"application/json":{"schema":{"$id":"https://aweb-leony.vercel.app/schemas/leony-problem.json","type":"object","additionalProperties":false,"required":["error"],"properties":{"error":{"type":"object","additionalProperties":false,"required":["type","message","code","request_id"],"properties":{"type":{"type":"string","enum":["authentication_error","authorization_error","validation_error","rate_limit_error","execution_error","service_unavailable"]},"message":{"type":"string"},"code":{"type":"string"},"docs":{"type":"string","format":"uri"},"request_id":{"type":"string"}}}}},"examples":{"problem":{"summary":"Insufficient Leony scope.","value":{"error":{"type":"validation_error","message":"Insufficient Leony scope.","code":"invalid_request","docs":"https://aweb-leony.vercel.app/docs#auth","request_id":"00000000-0000-4000-8000-000000000000"}}}}}}},"429":{"description":"Rate limit exceeded.","content":{"application/json":{"schema":{"$id":"https://aweb-leony.vercel.app/schemas/leony-problem.json","type":"object","additionalProperties":false,"required":["error"],"properties":{"error":{"type":"object","additionalProperties":false,"required":["type","message","code","request_id"],"properties":{"type":{"type":"string","enum":["authentication_error","authorization_error","validation_error","rate_limit_error","execution_error","service_unavailable"]},"message":{"type":"string"},"code":{"type":"string"},"docs":{"type":"string","format":"uri"},"request_id":{"type":"string"}}}}},"examples":{"problem":{"summary":"Rate limit exceeded.","value":{"error":{"type":"rate_limit_error","message":"Rate limit exceeded.","code":"rate_limit_exceeded","docs":"https://aweb-leony.vercel.app/docs#auth","request_id":"00000000-0000-4000-8000-000000000000"}}}}}}},"500":{"description":"Execution failed.","content":{"application/json":{"schema":{"$id":"https://aweb-leony.vercel.app/schemas/leony-problem.json","type":"object","additionalProperties":false,"required":["error"],"properties":{"error":{"type":"object","additionalProperties":false,"required":["type","message","code","request_id"],"properties":{"type":{"type":"string","enum":["authentication_error","authorization_error","validation_error","rate_limit_error","execution_error","service_unavailable"]},"message":{"type":"string"},"code":{"type":"string"},"docs":{"type":"string","format":"uri"},"request_id":{"type":"string"}}}}},"examples":{"problem":{"summary":"Execution failed.","value":{"error":{"type":"validation_error","message":"Execution failed.","code":"invalid_request","docs":"https://aweb-leony.vercel.app/docs#auth","request_id":"00000000-0000-4000-8000-000000000000"}}}}}}}}}}}}