{"openapi":"3.1.0","info":{"title":"TasteMaker API","description":"Extract UI/UX taste preferences and generate brand style packages","version":"3.0.0"},"paths":{"/api/auth/me":{"get":{"tags":["auth"],"summary":"Get Me","description":"Get current user profile.","operationId":"get_me_api_auth_me_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserResponse"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/sessions":{"get":{"tags":["sessions"],"summary":"List Sessions","description":"List all sessions for the current user.","operationId":"list_sessions_api_sessions_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/SessionResponse"},"type":"array","title":"Response List Sessions Api Sessions Get"}}}}},"security":[{"OAuth2PasswordBearer":[]}]},"post":{"tags":["sessions"],"summary":"Create Session","description":"Create a new extraction session.","operationId":"create_session_api_sessions_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SessionCreate"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SessionResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/sessions/{session_id}":{"get":{"tags":["sessions"],"summary":"Get Session","description":"Get details of a specific session.","operationId":"get_session_api_sessions__session_id__get","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"session_id","in":"path","required":true,"schema":{"type":"string","title":"Session Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SessionDetailResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"tags":["sessions"],"summary":"Update Session","description":"Update session fields (e.g. rename).","operationId":"update_session_api_sessions__session_id__patch","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"session_id","in":"path","required":true,"schema":{"type":"string","title":"Session Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SessionUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SessionResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["sessions"],"summary":"Delete Session","description":"Delete a session.","operationId":"delete_session_api_sessions__session_id__delete","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"session_id","in":"path","required":true,"schema":{"type":"string","title":"Session Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/sessions/{session_id}/set-phase":{"post":{"tags":["sessions"],"summary":"Set Phase","description":"Set the session to a previously reached phase (rewind or fast-forward).","operationId":"set_phase_api_sessions__session_id__set_phase_post","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"session_id","in":"path","required":true,"schema":{"type":"string","title":"Session Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SetPhaseRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SessionResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/sessions/{session_id}/rules":{"get":{"tags":["rules"],"summary":"Get Session Rules","description":"Get all rules for a session.","operationId":"get_session_rules_api_sessions__session_id__rules_get","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"session_id","in":"path","required":true,"schema":{"type":"string","title":"Session Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/StyleRuleResponse"},"title":"Response Get Session Rules Api Sessions  Session Id  Rules Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["rules"],"summary":"Add Stated Rule","description":"Add a stated preference rule.","operationId":"add_stated_rule_api_sessions__session_id__rules_post","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"session_id","in":"path","required":true,"schema":{"type":"string","title":"Session Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RuleCreate"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StyleRuleResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/sessions/{session_id}/rules/{rule_id}":{"patch":{"tags":["rules"],"summary":"Update Rule","description":"Update a rule.","operationId":"update_rule_api_sessions__session_id__rules__rule_id__patch","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"session_id","in":"path","required":true,"schema":{"type":"string","title":"Session Id"}},{"name":"rule_id","in":"path","required":true,"schema":{"type":"string","title":"Rule Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RuleUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StyleRuleResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["rules"],"summary":"Delete Rule","description":"Delete a rule.","operationId":"delete_rule_api_sessions__session_id__rules__rule_id__delete","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"session_id","in":"path","required":true,"schema":{"type":"string","title":"Session Id"}},{"name":"rule_id","in":"path","required":true,"schema":{"type":"string","title":"Rule Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/sessions/{session_id}/generate-skill":{"post":{"tags":["skills"],"summary":"Generate Skill","description":"Generate a skill package for the session.","operationId":"generate_skill_api_sessions__session_id__generate_skill_post","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"session_id","in":"path","required":true,"schema":{"type":"string","title":"Session Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SkillGenerateResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/sessions/{session_id}/generation-status":{"get":{"tags":["skills"],"summary":"Get Generation Status","description":"Get the current generation status for a session's skill package.","operationId":"get_generation_status_api_sessions__session_id__generation_status_get","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"session_id","in":"path","required":true,"schema":{"type":"string","title":"Session Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenerationStatusResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/skills/{skill_id}/download":{"get":{"tags":["skills"],"summary":"Download Skill","description":"Download a generated skill package.","operationId":"download_skill_api_skills__skill_id__download_get","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"skill_id","in":"path","required":true,"schema":{"type":"string","title":"Skill Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/sessions/{session_id}/brand-guide-download":{"get":{"tags":["skills"],"summary":"Get Brand Guide Download","description":"Return a URL the frontend can use to download the brand guide PDF.\n\nRegenerates the PDF (and ZIP) if the brand was edited since last build.\nFor GCS-stored PDFs, returns the signed URL directly so the browser can\nfetch it as a top-level navigation (no Authorization header, no preflight).\nFor local storage, returns the streaming endpoint URL.","operationId":"get_brand_guide_download_api_sessions__session_id__brand_guide_download_get","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"session_id","in":"path","required":true,"schema":{"type":"string","title":"Session Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/skills/{skill_id}/download-url":{"get":{"tags":["skills"],"summary":"Get Skill Download Url","description":"Return a URL the frontend can use to download the skill ZIP.\n\nIf the skill is stale (brand edited since last build) or the file is\nmissing, regenerates on the fly before returning the URL.","operationId":"get_skill_download_url_api_skills__skill_id__download_url_get","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"skill_id","in":"path","required":true,"schema":{"type":"string","title":"Skill Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/sessions/{session_id}/brand-guide.pdf":{"get":{"tags":["skills"],"summary":"Download Brand Guide Pdf","description":"Download the brand guide PDF, serving from storage if available.","operationId":"download_brand_guide_pdf_api_sessions__session_id__brand_guide_pdf_get","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"session_id","in":"path","required":true,"schema":{"type":"string","title":"Session Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/sessions/{session_id}/asset-status":{"get":{"tags":["skills"],"summary":"Get Asset Status","description":"Check if pre-generated assets exist for a session.","operationId":"get_asset_status_api_sessions__session_id__asset_status_get","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"session_id","in":"path","required":true,"schema":{"type":"string","title":"Session Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AssetStatusResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/audit/screenshot":{"post":{"tags":["audit"],"summary":"Audit Screenshot","description":"Audit a screenshot against TML rules.\n\nProcess:\n1. Claude Vision EXTRACTS colors, fonts, and measurements from the image\n2. TML rules are applied PROGRAMMATICALLY to the extracted values\n3. Violations are reported based on deterministic rule checking\n\nThis is NOT LLM opinion - it's programmatic rule application.","operationId":"audit_screenshot_api_audit_screenshot_post","requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_audit_screenshot_api_audit_screenshot_post"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AuditResult"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/audit/url":{"post":{"tags":["audit"],"summary":"Audit Url","description":"Audit a live URL against TML rules.\n\nProcess:\n1. Playwright captures a screenshot of the URL\n2. Claude Vision EXTRACTS colors, fonts, and measurements from the image\n3. TML rules are applied PROGRAMMATICALLY to the extracted values\n4. Violations are reported based on deterministic rule checking","operationId":"audit_url_api_audit_url_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UrlAuditRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AuditResult"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/audit/rules/available":{"get":{"tags":["audit"],"summary":"Get Available Audit Rules","description":"Get all available audit rules including static and interactive.\n\nReturns rules grouped by category (STATIC, TEMPORAL, BEHAVIORAL, SPATIAL, PATTERN).","operationId":"get_available_audit_rules_api_audit_rules_available_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/audit/rules/{category}":{"get":{"tags":["audit"],"summary":"Get Rules By Category Endpoint","description":"Get audit rules for a specific category.\n\nCategories: static, temporal, behavioral, spatial, pattern","operationId":"get_rules_by_category_endpoint_api_audit_rules__category__get","parameters":[{"name":"category","in":"path","required":true,"schema":{"type":"string","title":"Category"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/generate/component":{"post":{"tags":["generator"],"summary":"Generate Component","description":"Generate a styled component using Claude API.","operationId":"generate_component_api_generate_component_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenerateRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenerateResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/generate/library":{"post":{"tags":["generator"],"summary":"Export Component Library","description":"Export a complete component library based on the session's TML rules.\nReturns a ZIP file with all component files.","operationId":"export_component_library_api_generate_library_post","requestBody":{"content":{"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/Body_export_component_library_api_generate_library_post"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/sessions/{session_id}/public-style":{"get":{"tags":["mockups"],"summary":"Get Public Style","description":"Get style data for a session.\nUsed by MockupRender component to apply styles.","operationId":"get_public_style_api_sessions__session_id__public_style_get","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"session_id","in":"path","required":true,"schema":{"type":"string","title":"Session Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicStyleResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/sessions/{session_id}/generate-mockup-pngs":{"post":{"tags":["mockups"],"summary":"Generate Mockup Pngs Endpoint","description":"Generate PNG mockups for a session using Playwright.\nThis endpoint is called before skill package generation to create mockup images.","operationId":"generate_mockup_pngs_endpoint_api_sessions__session_id__generate_mockup_pngs_post","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"session_id","in":"path","required":true,"schema":{"type":"string","title":"Session Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MockupGenerationResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/sessions/{session_id}/upload-mockup":{"post":{"tags":["mockups"],"summary":"Upload Mockup","description":"Upload a mockup PNG for a session.\nCalled after client-side capture with html2canvas.","operationId":"upload_mockup_api_sessions__session_id__upload_mockup_post","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"session_id","in":"path","required":true,"schema":{"type":"string","title":"Session Id"}},{"name":"mockup_type","in":"query","required":true,"schema":{"type":"string","title":"Mockup Type"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/sessions/{session_id}/explore/palettes":{"get":{"tags":["exploration"],"summary":"Get Palette Options","description":"Get 5 color palette options for exploration.\n\nUses Claude API to generate contextually relevant palettes based on\nthe project description and any previous selections.","operationId":"get_palette_options_api_sessions__session_id__explore_palettes_get","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"session_id","in":"path","required":true,"schema":{"type":"string","title":"Session Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExplorationResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/sessions/{session_id}/explore/palettes/select":{"post":{"tags":["exploration"],"summary":"Select Palette","description":"Submit a palette selection.\n\nIf wants_refinement=True, generates 5 refined options within the selected family.\nIf wants_refinement=False, locks in the selection and moves to typography.","operationId":"select_palette_api_sessions__session_id__explore_palettes_select_post","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"session_id","in":"path","required":true,"schema":{"type":"string","title":"Session Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExplorationSelection"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExplorationProgressResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/sessions/{session_id}/explore/typography":{"get":{"tags":["exploration"],"summary":"Get Typography Options","description":"Get 5 typography pairing options for exploration.","operationId":"get_typography_options_api_sessions__session_id__explore_typography_get","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"session_id","in":"path","required":true,"schema":{"type":"string","title":"Session Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExplorationResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/sessions/{session_id}/explore/typography/select":{"post":{"tags":["exploration"],"summary":"Select Typography","description":"Submit a typography selection.","operationId":"select_typography_api_sessions__session_id__explore_typography_select_post","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"session_id","in":"path","required":true,"schema":{"type":"string","title":"Session Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExplorationSelection"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExplorationProgressResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/audit/interactive/check-ffmpeg":{"get":{"tags":["interactive-audit"],"summary":"Check Ffmpeg","description":"Check if FFmpeg is installed for video processing.","operationId":"check_ffmpeg_api_audit_interactive_check_ffmpeg_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/audit/interactive/video":{"post":{"tags":["interactive-audit"],"summary":"Audit Video","description":"Start a video-based UX audit.\n\nAccepts a video file, extracts keyframes, and queues analysis via Celery.\nReturns immediately with recording ID - use GET /recording/{id} to check progress.\n\nArgs:\n    session_id: The extraction session to audit against\n    video: Video file (mp4, webm, mov, avi)\n\nReturns:\n    Recording metadata with status \"pending\"","operationId":"audit_video_api_audit_interactive_video_post","requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_audit_video_api_audit_interactive_video_post"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InteractionRecordingResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/audit/interactive/replay":{"post":{"tags":["interactive-audit"],"summary":"Audit Replay","description":"Start a Playwright replay-based UX audit.\n\nExecutes a series of actions on a URL, capturing screenshots at each step.\nProcessing is dispatched to a Celery worker.\n\nArgs:\n    session_id: The extraction session to audit against\n    target_url: URL to navigate to\n    actions: JSON array of Playwright actions (optional)\n             Format: [{\"action\": \"click\", \"selector\": \"#btn\"}, ...]\n\nReturns:\n    Recording metadata with status \"pending\"","operationId":"audit_replay_api_audit_interactive_replay_post","requestBody":{"content":{"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/Body_audit_replay_api_audit_interactive_replay_post"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/audit/interactive/recording/{recording_id}":{"get":{"tags":["interactive-audit"],"summary":"Get Recording Status","description":"Get the status of a recording and its analysis results.","operationId":"get_recording_status_api_audit_interactive_recording__recording_id__get","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"recording_id","in":"path","required":true,"schema":{"type":"string","title":"Recording Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/audit/interactive/recording/{recording_id}/results":{"get":{"tags":["interactive-audit"],"summary":"Get Audit Results","description":"Get the full audit results for a completed recording.","operationId":"get_audit_results_api_audit_interactive_recording__recording_id__results_get","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"recording_id","in":"path","required":true,"schema":{"type":"string","title":"Recording Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/sessions/{session_id}/studio/progress":{"get":{"tags":["component_studio"],"summary":"Get Studio Progress","description":"Get the current studio progress state.","operationId":"get_studio_progress_api_sessions__session_id__studio_progress_get","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"session_id","in":"path","required":true,"schema":{"type":"string","title":"Session Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StudioProgressResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/sessions/{session_id}/studio/component/{component_type}/dimensions":{"get":{"tags":["component_studio"],"summary":"Get Component Dimensions","description":"Get dimension definitions for a component type.","operationId":"get_component_dimensions_api_sessions__session_id__studio_component__component_type__dimensions_get","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"session_id","in":"path","required":true,"schema":{"type":"string","title":"Session Id"}},{"name":"component_type","in":"path","required":true,"schema":{"type":"string","title":"Component Type"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ComponentDimensionsResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/sessions/{session_id}/studio/component/{component_type}/state":{"get":{"tags":["component_studio"],"summary":"Get Component State","description":"Get current choices for a component.","operationId":"get_component_state_api_sessions__session_id__studio_component__component_type__state_get","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"session_id","in":"path","required":true,"schema":{"type":"string","title":"Session Id"}},{"name":"component_type","in":"path","required":true,"schema":{"type":"string","title":"Component Type"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ComponentStateResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/sessions/{session_id}/studio/component/{component_type}/dimension":{"post":{"tags":["component_studio"],"summary":"Submit Dimension Choice","description":"Submit a dimension choice for a component.","operationId":"submit_dimension_choice_api_sessions__session_id__studio_component__component_type__dimension_post","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"session_id","in":"path","required":true,"schema":{"type":"string","title":"Session Id"}},{"name":"component_type","in":"path","required":true,"schema":{"type":"string","title":"Component Type"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DimensionChoiceSubmit"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/sessions/{session_id}/studio/component/lock":{"post":{"tags":["component_studio"],"summary":"Lock Component","description":"Lock the current component and advance to the next.","operationId":"lock_component_api_sessions__session_id__studio_component_lock_post","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"session_id","in":"path","required":true,"schema":{"type":"string","title":"Session Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LockComponentResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/sessions/{session_id}/studio/checkpoint/{checkpoint_id}":{"get":{"tags":["component_studio"],"summary":"Get Checkpoint","description":"Get checkpoint data for a mockup review.","operationId":"get_checkpoint_api_sessions__session_id__studio_checkpoint__checkpoint_id__get","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"session_id","in":"path","required":true,"schema":{"type":"string","title":"Session Id"}},{"name":"checkpoint_id","in":"path","required":true,"schema":{"type":"string","title":"Checkpoint Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CheckpointData"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/sessions/{session_id}/studio/checkpoint/{checkpoint_id}/approve":{"post":{"tags":["component_studio"],"summary":"Approve Checkpoint","description":"Approve a checkpoint and advance to the next component group.","operationId":"approve_checkpoint_api_sessions__session_id__studio_checkpoint__checkpoint_id__approve_post","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"session_id","in":"path","required":true,"schema":{"type":"string","title":"Session Id"}},{"name":"checkpoint_id","in":"path","required":true,"schema":{"type":"string","title":"Checkpoint Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/sessions/{session_id}/studio/component/{component_type}/go-back":{"post":{"tags":["component_studio"],"summary":"Go Back To Component","description":"Navigate back to a previously completed component for editing.","operationId":"go_back_to_component_api_sessions__session_id__studio_component__component_type__go_back_post","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"session_id","in":"path","required":true,"schema":{"type":"string","title":"Session Id"}},{"name":"component_type","in":"path","required":true,"schema":{"type":"string","title":"Component Type"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/sessions/{session_id}/studio/preview-styles":{"get":{"tags":["component_studio"],"summary":"Get Preview Styles","description":"Get all accumulated component styles for live preview.","operationId":"get_preview_styles_api_sessions__session_id__studio_preview_styles_get","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"session_id","in":"path","required":true,"schema":{"type":"string","title":"Session Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/sessions/{session_id}/explore/icons":{"get":{"tags":["icons"],"summary":"Get Icon Options","description":"Get available icon set options.","operationId":"get_icon_options_api_sessions__session_id__explore_icons_get","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"session_id","in":"path","required":true,"schema":{"type":"string","title":"Session Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IconSetsResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/sessions/{session_id}/explore/icons/select":{"post":{"tags":["icons"],"summary":"Select Icon Set","description":"Select an icon set and advance to logo upload phase.","operationId":"select_icon_set_api_sessions__session_id__explore_icons_select_post","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"session_id","in":"path","required":true,"schema":{"type":"string","title":"Session Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/IconSelectRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IconSelectResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/sessions/{session_id}/generate-logo":{"post":{"tags":["logo"],"summary":"Generate Logo","description":"Generate 3 AI logo concepts for the session's brand (async, non-blocking).","operationId":"generate_logo_api_sessions__session_id__generate_logo_post","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"session_id","in":"path","required":true,"schema":{"type":"string","title":"Session Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LogoGenerateResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/sessions/{session_id}/generate-text-logo":{"post":{"tags":["logo"],"summary":"Generate Text Logo","description":"Generate text-based logo concepts using brand name, font, and colors.","operationId":"generate_text_logo_api_sessions__session_id__generate_text_logo_post","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"session_id","in":"path","required":true,"schema":{"type":"string","title":"Session Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LogoGenerateResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/sessions/{session_id}/select-logo":{"post":{"tags":["logo"],"summary":"Select Logo","description":"Select one of the generated concepts as the session logo and advance phase.","operationId":"select_logo_api_sessions__session_id__select_logo_post","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"session_id","in":"path","required":true,"schema":{"type":"string","title":"Session Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LogoSelectRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LogoSelectResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/sessions/{session_id}/upload-logo":{"post":{"tags":["logo"],"summary":"Upload Logo","description":"Upload a logo image and advance to component studio.","operationId":"upload_logo_api_sessions__session_id__upload_logo_post","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"session_id","in":"path","required":true,"schema":{"type":"string","title":"Session Id"}}],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_upload_logo_api_sessions__session_id__upload_logo_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LogoUploadResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/sessions/{session_id}/skip-logo":{"post":{"tags":["logo"],"summary":"Skip Logo","description":"Skip logo upload and advance to component studio.","operationId":"skip_logo_api_sessions__session_id__skip_logo_post","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"session_id","in":"path","required":true,"schema":{"type":"string","title":"Session Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LogoUploadResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/sessions/{session_id}/logo":{"get":{"tags":["logo"],"summary":"Get Logo","description":"Get the stored logo for a session. Returns a URL instead of inline data.","operationId":"get_logo_api_sessions__session_id__logo_get","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"session_id","in":"path","required":true,"schema":{"type":"string","title":"Session Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LogoResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/sessions/{session_id}/logo-image":{"get":{"tags":["logo"],"summary":"Get Logo Image","description":"Serve the logo image. No auth required — session UUID serves as access control.","operationId":"get_logo_image_api_sessions__session_id__logo_image_get","parameters":[{"name":"session_id","in":"path","required":true,"schema":{"type":"string","title":"Session Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/stripe/create-checkout":{"post":{"tags":["stripe"],"summary":"Create Checkout Session","description":"Create a Stripe Checkout session and return the checkout URL.","operationId":"create_checkout_session_api_stripe_create_checkout_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateCheckoutRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/stripe/webhook":{"post":{"tags":["stripe"],"summary":"Stripe Webhook","description":"Handle Stripe webhook events.\n\nReads the raw body for signature verification.","operationId":"stripe_webhook_api_stripe_webhook_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/stripe/subscription":{"get":{"tags":["stripe"],"summary":"Get Subscription Status","description":"Return the current user's subscription status.","operationId":"get_subscription_status_api_stripe_subscription_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SubscriptionStatusResponse"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/stripe/customer-portal":{"post":{"tags":["stripe"],"summary":"Create Customer Portal Session","description":"Create a Stripe Customer Portal session and return the URL.","operationId":"create_customer_portal_session_api_stripe_customer_portal_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/sessions/{session_id}/import-screenshot":{"post":{"tags":["screenshot-import"],"summary":"Import Screenshot","operationId":"import_screenshot_api_sessions__session_id__import_screenshot_post","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"session_id","in":"path","required":true,"schema":{"type":"string","title":"Session Id"}}],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_import_screenshot_api_sessions__session_id__import_screenshot_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/sessions/{session_id}/generate-dynamic":{"post":{"tags":["dynamic-generation"],"summary":"Generate Dynamic Component Endpoint","operationId":"generate_dynamic_component_endpoint_api_sessions__session_id__generate_dynamic_post","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"session_id","in":"path","required":true,"schema":{"type":"string","title":"Session Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DynamicGenerateRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DynamicGenerateResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/grant-tier":{"post":{"tags":["admin"],"summary":"Grant Tier","operationId":"grant_tier_api_admin_grant_tier_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GrantTierRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GrantTierResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/sessions/{session_id}/positioning/refine":{"post":{"tags":["positioning"],"summary":"Refine Positioning","description":"Refine a brand positioning statement via AI conversation.\n\nAccepts the user's latest message and optional conversation history,\nsends them to the AI provider, and returns a refined statement.\nMax 10 iterations per session.","operationId":"refine_positioning_api_sessions__session_id__positioning_refine_post","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"session_id","in":"path","required":true,"schema":{"type":"string","title":"Session Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PositioningRefineRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PositioningRefineResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/sessions/{session_id}/positioning":{"patch":{"tags":["positioning"],"summary":"Save Positioning","description":"Save the accepted brand positioning statement to the session.","operationId":"save_positioning_api_sessions__session_id__positioning_patch","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"session_id","in":"path","required":true,"schema":{"type":"string","title":"Session Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PositioningSaveRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PositioningSaveResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/public/brands/featured":{"get":{"tags":["public-brand"],"summary":"Get Featured Brands","description":"Return published brands for the landing page showcase.","operationId":"get_featured_brands_api_public_brands_featured_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/public/brand/{slug}":{"get":{"tags":["public-brand"],"summary":"Get Public Brand","description":"Get a published brand page by its slug. No authentication required.","operationId":"get_public_brand_api_public_brand__slug__get","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string","title":"Slug"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicBrandResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/public/brand/{slug}/og-image.png":{"get":{"tags":["public-brand"],"summary":"Get Og Image","description":"Generate and return a branded OG card image for social media.","operationId":"get_og_image_api_public_brand__slug__og_image_png_get","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string","title":"Slug"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/public/brand/{slug}/logo":{"get":{"tags":["public-brand"],"summary":"Get Public Brand Logo","description":"Serve the logo for a published brand. Redirects to signed URL or serves inline.","operationId":"get_public_brand_logo_api_public_brand__slug__logo_get","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string","title":"Slug"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/sessions/{session_id}/publish":{"post":{"tags":["public-brand"],"summary":"Publish Brand","description":"Toggle publish state for a brand session. Auto-generates slug if needed.","operationId":"publish_brand_api_sessions__session_id__publish_post","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"session_id","in":"path","required":true,"schema":{"type":"string","title":"Session Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublishBrandRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublishBrandResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/sessions/{session_id}/publish-status":{"get":{"tags":["public-brand"],"summary":"Get Publish Status","description":"Get current publish state and slug for a session.","operationId":"get_publish_status_api_sessions__session_id__publish_status_get","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"session_id","in":"path","required":true,"schema":{"type":"string","title":"Session Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublishBrandResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/support":{"post":{"tags":["support"],"summary":"Submit Support Request","description":"Submit a support request. Works for both authenticated and anonymous users.","operationId":"submit_support_request_api_support_post","parameters":[{"name":"user-agent","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"User-Agent"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SupportRequestCreate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SupportRequestResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/feature-flags":{"get":{"tags":["feature-flags"],"summary":"Get Feature Flags","description":"Return current feature flag states.","operationId":"get_feature_flags_api_feature_flags_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/health":{"get":{"summary":"Health Check","description":"Health check endpoint with configuration status.\n\nReturns information about the current configuration for debugging\nand for frontend single-user mode detection.","operationId":"health_check_health_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/b/{slug}":{"get":{"summary":"Public Brand With Og","description":"Serve index.html with injected OG meta tags for social media crawlers.\nThe React app still handles rendering — this just ensures crawlers see\nproper og:title, og:description, og:image tags in the initial HTML.","operationId":"public_brand_with_og_b__slug__get","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string","title":"Slug"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/agent-handles":{"get":{"summary":"Get Agent Handles","description":"Returns the agent-handles documentation in markdown format.\nThis endpoint is designed for LLM consumption to understand\navailable UI handles for automated testing.","operationId":"get_agent_handles_agent_handles_get","responses":{"200":{"description":"Successful Response","content":{"text/plain":{"schema":{"type":"string"}}}}}}}},"components":{"schemas":{"AssetStatusResponse":{"properties":{"has_skill":{"type":"boolean","title":"Has Skill"},"skill_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Skill Id"},"download_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Download Url"},"pdf_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Pdf Url"},"preview":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Preview"},"generated_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Generated At"}},"type":"object","required":["has_skill"],"title":"AssetStatusResponse"},"AuditResult":{"properties":{"violations":{"items":{"$ref":"#/components/schemas/Violation"},"type":"array","title":"Violations"},"summary":{"type":"string","title":"Summary"},"score":{"type":"integer","title":"Score"}},"type":"object","required":["violations","summary","score"],"title":"AuditResult"},"Body_audit_replay_api_audit_interactive_replay_post":{"properties":{"session_id":{"type":"string","title":"Session Id"},"target_url":{"type":"string","title":"Target Url"},"actions":{"type":"string","title":"Actions","default":"[]"}},"type":"object","required":["session_id","target_url"],"title":"Body_audit_replay_api_audit_interactive_replay_post"},"Body_audit_screenshot_api_audit_screenshot_post":{"properties":{"file":{"type":"string","format":"binary","title":"File"},"session_id":{"type":"string","title":"Session Id"}},"type":"object","required":["file","session_id"],"title":"Body_audit_screenshot_api_audit_screenshot_post"},"Body_audit_video_api_audit_interactive_video_post":{"properties":{"session_id":{"type":"string","title":"Session Id"},"video":{"type":"string","format":"binary","title":"Video"}},"type":"object","required":["session_id","video"],"title":"Body_audit_video_api_audit_interactive_video_post"},"Body_export_component_library_api_generate_library_post":{"properties":{"session_id":{"type":"string","title":"Session Id"},"output_format":{"type":"string","title":"Output Format","default":"react"}},"type":"object","required":["session_id"],"title":"Body_export_component_library_api_generate_library_post"},"Body_import_screenshot_api_sessions__session_id__import_screenshot_post":{"properties":{"file":{"type":"string","format":"binary","title":"File"}},"type":"object","required":["file"],"title":"Body_import_screenshot_api_sessions__session_id__import_screenshot_post"},"Body_upload_logo_api_sessions__session_id__upload_logo_post":{"properties":{"file":{"type":"string","format":"binary","title":"File"}},"type":"object","required":["file"],"title":"Body_upload_logo_api_sessions__session_id__upload_logo_post"},"CheckpointData":{"properties":{"checkpoint_id":{"type":"string","title":"Checkpoint Id"},"label":{"type":"string","title":"Label"},"description":{"type":"string","title":"Description"},"mockup_type":{"type":"string","title":"Mockup Type"},"components":{"items":{"type":"string"},"type":"array","title":"Components"},"component_styles":{"additionalProperties":{"additionalProperties":{"type":"string"},"type":"object"},"type":"object","title":"Component Styles"},"colors":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Colors"},"typography":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Typography"}},"type":"object","required":["checkpoint_id","label","description","mockup_type","components","component_styles"],"title":"CheckpointData"},"ComparisonResultResponse":{"properties":{"id":{"type":"string","title":"Id"},"comparison_id":{"type":"integer","title":"Comparison Id"},"component_type":{"type":"string","title":"Component Type"},"phase":{"type":"string","title":"Phase"},"choice":{"type":"string","title":"Choice"},"decision_time_ms":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Decision Time Ms"},"created_at":{"type":"string","format":"date-time","title":"Created At"}},"type":"object","required":["id","comparison_id","component_type","phase","choice","created_at"],"title":"ComparisonResultResponse"},"ComponentDimensionsResponse":{"properties":{"component_type":{"type":"string","title":"Component Type"},"component_label":{"type":"string","title":"Component Label"},"dimensions":{"items":{"$ref":"#/components/schemas/DimensionDefinition"},"type":"array","title":"Dimensions"}},"type":"object","required":["component_type","component_label","dimensions"],"title":"ComponentDimensionsResponse"},"ComponentStateResponse":{"properties":{"component_type":{"type":"string","title":"Component Type"},"choices":{"additionalProperties":{"additionalProperties":true,"type":"object"},"type":"object","title":"Choices"}},"type":"object","required":["component_type","choices"],"title":"ComponentStateResponse"},"ConversationMessage":{"properties":{"role":{"type":"string","title":"Role"},"content":{"type":"string","title":"Content"}},"type":"object","required":["role","content"],"title":"ConversationMessage"},"CreateCheckoutRequest":{"properties":{"tier":{"type":"string","title":"Tier"},"success_url":{"type":"string","title":"Success Url"},"cancel_url":{"type":"string","title":"Cancel Url"}},"type":"object","required":["tier","success_url","cancel_url"],"title":"CreateCheckoutRequest"},"DimensionChoiceSubmit":{"properties":{"dimension":{"type":"string","title":"Dimension"},"selected_option_id":{"type":"string","title":"Selected Option Id"},"selected_value":{"type":"string","title":"Selected Value"},"css_property":{"type":"string","title":"Css Property"},"fine_tuned_value":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Fine Tuned Value"}},"type":"object","required":["dimension","selected_option_id","selected_value","css_property"],"title":"DimensionChoiceSubmit"},"DimensionDefinition":{"properties":{"key":{"type":"string","title":"Key"},"label":{"type":"string","title":"Label"},"css_property":{"type":"string","title":"Css Property"},"options":{"items":{"$ref":"#/components/schemas/DimensionOption"},"type":"array","title":"Options"},"fine_tune":{"anyOf":[{"$ref":"#/components/schemas/FineTuneConfig"},{"type":"null"}]},"order":{"type":"integer","title":"Order"}},"type":"object","required":["key","label","css_property","options","order"],"title":"DimensionDefinition"},"DimensionOption":{"properties":{"id":{"type":"string","title":"Id"},"label":{"type":"string","title":"Label"},"value":{"type":"string","title":"Value"}},"type":"object","required":["id","label","value"],"title":"DimensionOption"},"DynamicGenerateRequest":{"properties":{"description":{"type":"string","title":"Description"}},"type":"object","required":["description"],"title":"DynamicGenerateRequest"},"DynamicGenerateResponse":{"properties":{"component_name":{"type":"string","title":"Component Name"},"code":{"type":"string","title":"Code"},"description":{"type":"string","title":"Description"},"props":{"items":{},"type":"array","title":"Props"}},"type":"object","required":["component_name","code","description","props"],"title":"DynamicGenerateResponse"},"ExplorationProgressResponse":{"properties":{"success":{"type":"boolean","title":"Success"},"exploration_depth":{"type":"integer","title":"Exploration Depth"},"next_options":{"anyOf":[{"items":{"additionalProperties":true,"type":"object"},"type":"array"},{"type":"null"}],"title":"Next Options"},"locked_in":{"type":"boolean","title":"Locked In","default":false},"new_phase":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"New Phase"},"message":{"type":"string","title":"Message"}},"type":"object","required":["success","exploration_depth","message"],"title":"ExplorationProgressResponse","description":"Response after making a selection."},"ExplorationResponse":{"properties":{"options":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Options"},"context":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Context"},"exploration_depth":{"type":"integer","title":"Exploration Depth","default":0},"exploration_type":{"type":"string","title":"Exploration Type"},"can_lock_in":{"type":"boolean","title":"Can Lock In","default":true}},"type":"object","required":["options","exploration_type"],"title":"ExplorationResponse","description":"Response containing exploration options."},"ExplorationSelection":{"properties":{"selected_option_id":{"type":"string","title":"Selected Option Id"},"selected_option":{"additionalProperties":true,"type":"object","title":"Selected Option"},"wants_refinement":{"type":"boolean","title":"Wants Refinement","default":true}},"type":"object","required":["selected_option_id","selected_option"],"title":"ExplorationSelection","description":"User's selection from exploration options."},"FineTuneConfig":{"properties":{"min":{"type":"number","title":"Min"},"max":{"type":"number","title":"Max"},"step":{"type":"number","title":"Step"},"unit":{"type":"string","title":"Unit"}},"type":"object","required":["min","max","step","unit"],"title":"FineTuneConfig"},"GenerateRequest":{"properties":{"session_id":{"type":"string","title":"Session Id"},"component_type":{"type":"string","title":"Component Type"},"variant":{"type":"string","title":"Variant"},"output_format":{"type":"string","title":"Output Format"},"custom_prompt":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Custom Prompt"}},"type":"object","required":["session_id","component_type","variant","output_format"],"title":"GenerateRequest"},"GenerateResponse":{"properties":{"code":{"type":"string","title":"Code"}},"type":"object","required":["code"],"title":"GenerateResponse"},"GenerationStatusResponse":{"properties":{"skill_id":{"type":"string","title":"Skill Id"},"status":{"type":"string","title":"Status"},"step":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Step"},"error":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error"},"download_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Download Url"},"pdf_download_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Pdf Download Url"},"preview":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Preview"}},"type":"object","required":["skill_id","status"],"title":"GenerationStatusResponse"},"GrantTierRequest":{"properties":{"email":{"type":"string","title":"Email"},"tier":{"type":"string","title":"Tier"}},"type":"object","required":["email","tier"],"title":"GrantTierRequest"},"GrantTierResponse":{"properties":{"email":{"type":"string","title":"Email"},"tier":{"type":"string","title":"Tier"},"message":{"type":"string","title":"Message"}},"type":"object","required":["email","tier","message"],"title":"GrantTierResponse"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"IconSelectRequest":{"properties":{"icon_set_id":{"type":"string","title":"Icon Set Id"}},"type":"object","required":["icon_set_id"],"title":"IconSelectRequest"},"IconSelectResponse":{"properties":{"success":{"type":"boolean","title":"Success"},"new_phase":{"type":"string","title":"New Phase"},"message":{"type":"string","title":"Message"}},"type":"object","required":["success","new_phase","message"],"title":"IconSelectResponse"},"IconSetOption":{"properties":{"id":{"type":"string","title":"Id"},"name":{"type":"string","title":"Name"},"package":{"type":"string","title":"Package"},"icon_count":{"type":"string","title":"Icon Count"},"style":{"type":"string","title":"Style"},"license":{"type":"string","title":"License"},"description":{"type":"string","title":"Description"},"preview_icons":{"items":{"type":"string"},"type":"array","title":"Preview Icons"}},"type":"object","required":["id","name","package","icon_count","style","license","description","preview_icons"],"title":"IconSetOption"},"IconSetsResponse":{"properties":{"icon_sets":{"items":{"$ref":"#/components/schemas/IconSetOption"},"type":"array","title":"Icon Sets"}},"type":"object","required":["icon_sets"],"title":"IconSetsResponse"},"InteractionRecordingResponse":{"properties":{"id":{"type":"string","title":"Id"},"session_id":{"type":"string","title":"Session Id"},"source_type":{"type":"string","title":"Source Type"},"duration_ms":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Duration Ms"},"frame_count":{"type":"integer","title":"Frame Count"},"status":{"type":"string","title":"Status"},"error_message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error Message"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"completed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Completed At"}},"type":"object","required":["id","session_id","source_type","frame_count","status","created_at"],"title":"InteractionRecordingResponse"},"LockComponentResponse":{"properties":{"success":{"type":"boolean","title":"Success"},"next_component":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Next Component"},"trigger_checkpoint":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Trigger Checkpoint"},"is_studio_complete":{"type":"boolean","title":"Is Studio Complete","default":false}},"type":"object","required":["success"],"title":"LockComponentResponse"},"LogoConcept":{"properties":{"concept_index":{"type":"integer","title":"Concept Index"},"prompt":{"type":"string","title":"Prompt"},"data_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Data Url"},"error":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error"}},"type":"object","required":["concept_index","prompt"],"title":"LogoConcept"},"LogoGenerateResponse":{"properties":{"success":{"type":"boolean","title":"Success"},"concepts":{"items":{"$ref":"#/components/schemas/LogoConcept"},"type":"array","title":"Concepts"},"remaining_generations":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Remaining Generations"},"generation_limit":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Generation Limit"}},"type":"object","required":["success","concepts"],"title":"LogoGenerateResponse"},"LogoResponse":{"properties":{"has_logo":{"type":"boolean","title":"Has Logo"},"logo_data":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Logo Data"}},"type":"object","required":["has_logo"],"title":"LogoResponse"},"LogoSelectRequest":{"properties":{"concept_index":{"type":"integer","title":"Concept Index"}},"type":"object","required":["concept_index"],"title":"LogoSelectRequest"},"LogoSelectResponse":{"properties":{"success":{"type":"boolean","title":"Success"},"has_logo":{"type":"boolean","title":"Has Logo"},"logo_data":{"type":"string","title":"Logo Data"},"message":{"type":"string","title":"Message"}},"type":"object","required":["success","has_logo","logo_data","message"],"title":"LogoSelectResponse"},"LogoUploadResponse":{"properties":{"success":{"type":"boolean","title":"Success"},"new_phase":{"type":"string","title":"New Phase"},"message":{"type":"string","title":"Message"},"has_logo":{"type":"boolean","title":"Has Logo"}},"type":"object","required":["success","new_phase","message","has_logo"],"title":"LogoUploadResponse"},"MockupGenerationResponse":{"properties":{"success":{"type":"boolean","title":"Success"},"mockups":{"items":{"type":"string"},"type":"array","title":"Mockups"},"message":{"type":"string","title":"Message"}},"type":"object","required":["success","mockups","message"],"title":"MockupGenerationResponse"},"PositioningRefineRequest":{"properties":{"message":{"type":"string","title":"Message"},"history":{"anyOf":[{"items":{"$ref":"#/components/schemas/ConversationMessage"},"type":"array"},{"type":"null"}],"title":"History"}},"type":"object","required":["message"],"title":"PositioningRefineRequest"},"PositioningRefineResponse":{"properties":{"statement":{"type":"string","title":"Statement"},"iteration":{"type":"integer","title":"Iteration"}},"type":"object","required":["statement","iteration"],"title":"PositioningRefineResponse"},"PositioningSaveRequest":{"properties":{"statement":{"type":"string","title":"Statement"}},"type":"object","required":["statement"],"title":"PositioningSaveRequest"},"PositioningSaveResponse":{"properties":{"statement":{"type":"string","title":"Statement"},"saved":{"type":"boolean","title":"Saved"}},"type":"object","required":["statement","saved"],"title":"PositioningSaveResponse"},"PublicBrandResponse":{"properties":{"name":{"type":"string","title":"Name"},"slug":{"type":"string","title":"Slug"},"brand_positioning":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Brand Positioning"},"chosen_colors":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Chosen Colors"},"chosen_typography":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Chosen Typography"},"chosen_icons":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Chosen Icons"},"chosen_logo":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Chosen Logo"},"component_styles":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Component Styles"},"rules":{"anyOf":[{"items":{},"type":"array"},{"type":"null"}],"title":"Rules"},"created_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Created At"}},"type":"object","required":["name","slug"],"title":"PublicBrandResponse"},"PublicStyleResponse":{"properties":{"chosen_colors":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Chosen Colors"},"chosen_typography":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Chosen Typography"}},"type":"object","title":"PublicStyleResponse"},"PublishBrandRequest":{"properties":{"is_published":{"type":"boolean","title":"Is Published"},"slug":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Slug"}},"type":"object","required":["is_published"],"title":"PublishBrandRequest"},"PublishBrandResponse":{"properties":{"is_published":{"type":"boolean","title":"Is Published"},"slug":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Slug"},"public_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Public Url"}},"type":"object","required":["is_published"],"title":"PublishBrandResponse"},"RuleCreate":{"properties":{"statement":{"type":"string","title":"Statement"},"component":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Component"}},"type":"object","required":["statement"],"title":"RuleCreate"},"RuleUpdate":{"properties":{"value":{"anyOf":[{},{"type":"null"}],"title":"Value"},"severity":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Severity"},"message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Message"}},"type":"object","title":"RuleUpdate"},"SessionCreate":{"properties":{"name":{"type":"string","title":"Name"},"brand_colors":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Brand Colors"},"project_description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Project Description"}},"type":"object","required":["name"],"title":"SessionCreate"},"SessionDetailResponse":{"properties":{"id":{"type":"string","title":"Id"},"name":{"type":"string","title":"Name"},"phase":{"type":"string","title":"Phase"},"brand_colors":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Brand Colors"},"project_description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Project Description"},"comparison_count":{"type":"integer","title":"Comparison Count"},"confidence_score":{"type":"number","title":"Confidence Score"},"established_preferences":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Established Preferences"},"chosen_colors":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Chosen Colors"},"chosen_typography":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Chosen Typography"},"chosen_icons":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Chosen Icons"},"chosen_logo":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Chosen Logo"},"brand_positioning":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Brand Positioning"},"slug":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Slug"},"is_published":{"type":"boolean","title":"Is Published","default":false},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Updated At"},"completed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Completed At"},"comparisons":{"items":{"$ref":"#/components/schemas/ComparisonResultResponse"},"type":"array","title":"Comparisons","default":[]},"rules":{"items":{"$ref":"#/components/schemas/StyleRuleResponse"},"type":"array","title":"Rules","default":[]}},"type":"object","required":["id","name","phase","comparison_count","confidence_score","created_at"],"title":"SessionDetailResponse"},"SessionResponse":{"properties":{"id":{"type":"string","title":"Id"},"name":{"type":"string","title":"Name"},"phase":{"type":"string","title":"Phase"},"brand_colors":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Brand Colors"},"project_description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Project Description"},"comparison_count":{"type":"integer","title":"Comparison Count"},"confidence_score":{"type":"number","title":"Confidence Score"},"established_preferences":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Established Preferences"},"chosen_colors":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Chosen Colors"},"chosen_typography":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Chosen Typography"},"chosen_icons":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Chosen Icons"},"chosen_logo":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Chosen Logo"},"brand_positioning":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Brand Positioning"},"slug":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Slug"},"is_published":{"type":"boolean","title":"Is Published","default":false},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Updated At"},"completed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Completed At"}},"type":"object","required":["id","name","phase","comparison_count","confidence_score","created_at"],"title":"SessionResponse"},"SessionUpdate":{"properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"}},"type":"object","title":"SessionUpdate"},"SetPhaseRequest":{"properties":{"target_phase":{"type":"string","title":"Target Phase"}},"type":"object","required":["target_phase"],"title":"SetPhaseRequest"},"SkillGenerateResponse":{"properties":{"skill_id":{"type":"string","title":"Skill Id"},"download_url":{"type":"string","title":"Download Url"},"pdf_download_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Pdf Download Url"},"preview":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Preview"},"generation_status":{"type":"string","title":"Generation Status","default":"completed"}},"type":"object","required":["skill_id","download_url"],"title":"SkillGenerateResponse"},"StudioProgressResponse":{"properties":{"current_component":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Current Component"},"current_dimension_index":{"type":"integer","title":"Current Dimension Index","default":0},"completed_components":{"items":{"type":"string"},"type":"array","title":"Completed Components","default":[]},"total_components":{"type":"integer","title":"Total Components","default":12},"checkpoint_approvals":{"items":{"type":"string"},"type":"array","title":"Checkpoint Approvals","default":[]},"pending_checkpoint":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Pending Checkpoint"},"is_complete":{"type":"boolean","title":"Is Complete","default":false}},"type":"object","title":"StudioProgressResponse"},"StyleRuleResponse":{"properties":{"id":{"type":"string","title":"Id"},"rule_id":{"type":"string","title":"Rule Id"},"component_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Component Type"},"property":{"type":"string","title":"Property"},"operator":{"type":"string","title":"Operator"},"value":{"type":"string","title":"Value"},"severity":{"type":"string","title":"Severity"},"confidence":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Confidence"},"source":{"type":"string","title":"Source"},"message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Message"},"is_modified":{"type":"boolean","title":"Is Modified"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"rule_category":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Rule Category","default":"STATIC"},"timing_constraint_ms":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Timing Constraint Ms"},"count_property":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Count Property"},"zone_definition":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Zone Definition"},"pattern_indicators":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Pattern Indicators"}},"type":"object","required":["id","rule_id","property","operator","value","severity","source","is_modified","created_at"],"title":"StyleRuleResponse"},"SubscriptionStatusResponse":{"properties":{"tier":{"type":"string","title":"Tier"},"stripe_subscription_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Stripe Subscription Id"},"active":{"type":"boolean","title":"Active"},"brand_credits":{"type":"integer","title":"Brand Credits","default":0}},"type":"object","required":["tier","active"],"title":"SubscriptionStatusResponse"},"SupportRequestCreate":{"properties":{"email":{"type":"string","title":"Email"},"subject":{"type":"string","title":"Subject"},"message":{"type":"string","title":"Message"},"page_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Page Url"}},"type":"object","required":["email","subject","message"],"title":"SupportRequestCreate"},"SupportRequestResponse":{"properties":{"id":{"type":"string","title":"Id"},"submitted":{"type":"boolean","title":"Submitted","default":true}},"type":"object","required":["id"],"title":"SupportRequestResponse"},"UrlAuditRequest":{"properties":{"url":{"type":"string","title":"Url"},"session_id":{"type":"string","title":"Session Id"}},"type":"object","required":["url","session_id"],"title":"UrlAuditRequest"},"UserResponse":{"properties":{"id":{"type":"string","title":"Id"},"email":{"type":"string","title":"Email"},"first_name":{"type":"string","title":"First Name"},"last_name":{"type":"string","title":"Last Name"},"subscription_tier":{"type":"string","title":"Subscription Tier","default":"free"},"avatar_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Avatar Url"},"brand_credits":{"type":"integer","title":"Brand Credits","default":0}},"type":"object","required":["id","email","first_name","last_name"],"title":"UserResponse"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"},"Violation":{"properties":{"rule_id":{"type":"string","title":"Rule Id"},"severity":{"type":"string","title":"Severity"},"property":{"type":"string","title":"Property"},"expected":{"type":"string","title":"Expected"},"found":{"type":"string","title":"Found"},"message":{"type":"string","title":"Message"},"suggestion":{"type":"string","title":"Suggestion"}},"type":"object","required":["rule_id","severity","property","expected","found","message","suggestion"],"title":"Violation"}},"securitySchemes":{"OAuth2PasswordBearer":{"type":"oauth2","flows":{"password":{"scopes":{},"tokenUrl":"/api/auth/login"}}}}}}